mysql2 0.2.24 → 0.3.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.
Files changed (57) hide show
  1. data/.gitignore +12 -0
  2. data/.rspec +2 -0
  3. data/.rvmrc +1 -0
  4. data/CHANGELOG.md +148 -0
  5. data/Gemfile +3 -0
  6. data/README.rdoc +257 -0
  7. data/Rakefile +5 -0
  8. data/benchmark/active_record.rb +51 -0
  9. data/benchmark/active_record_threaded.rb +42 -0
  10. data/benchmark/allocations.rb +33 -0
  11. data/benchmark/escape.rb +36 -0
  12. data/benchmark/query_with_mysql_casting.rb +80 -0
  13. data/benchmark/query_without_mysql_casting.rb +47 -0
  14. data/benchmark/sequel.rb +37 -0
  15. data/benchmark/setup_db.rb +119 -0
  16. data/benchmark/threaded.rb +44 -0
  17. data/ext/mysql2/client.c +272 -849
  18. data/ext/mysql2/client.h +12 -27
  19. data/ext/mysql2/extconf.rb +14 -72
  20. data/ext/mysql2/mysql2_ext.h +4 -7
  21. data/ext/mysql2/result.c +123 -319
  22. data/ext/mysql2/result.h +1 -4
  23. data/lib/active_record/connection_adapters/em_mysql2_adapter.rb +64 -0
  24. data/lib/active_record/fiber_patches.rb +104 -0
  25. data/lib/mysql2.rb +5 -20
  26. data/lib/mysql2/client.rb +200 -50
  27. data/lib/mysql2/em.rb +3 -13
  28. data/lib/mysql2/em_fiber.rb +31 -0
  29. data/lib/mysql2/error.rb +6 -71
  30. data/lib/mysql2/version.rb +2 -2
  31. data/mysql2.gemspec +32 -0
  32. data/spec/em/em_fiber_spec.rb +22 -0
  33. data/spec/em/em_spec.rb +9 -74
  34. data/spec/mysql2/client_spec.rb +126 -593
  35. data/spec/mysql2/error_spec.rb +44 -58
  36. data/spec/mysql2/result_spec.rb +85 -257
  37. data/spec/spec_helper.rb +3 -24
  38. data/tasks/benchmarks.rake +20 -0
  39. data/tasks/compile.rake +71 -0
  40. data/tasks/rspec.rake +16 -0
  41. data/tasks/vendor_mysql.rake +40 -0
  42. metadata +179 -92
  43. checksums.yaml +0 -7
  44. data/README.md +0 -524
  45. data/ext/mysql2/infile.c +0 -122
  46. data/ext/mysql2/infile.h +0 -1
  47. data/ext/mysql2/mysql_enc_name_to_ruby.h +0 -168
  48. data/ext/mysql2/mysql_enc_to_ruby.h +0 -246
  49. data/ext/mysql2/wait_for_single_fd.h +0 -36
  50. data/lib/active_record/connection_adapters/mysql2_adapter.rb +0 -635
  51. data/lib/arel/engines/sql/compilers/mysql2_compiler.rb +0 -11
  52. data/lib/mysql2/console.rb +0 -5
  53. data/spec/configuration.yml.example +0 -17
  54. data/spec/my.cnf.example +0 -9
  55. data/spec/test_data +0 -1
  56. data/support/mysql_enc_to_ruby.rb +0 -82
  57. data/support/ruby_enc_to_mysql.rb +0 -61
@@ -1,11 +0,0 @@
1
- module Arel
2
- module SqlCompiler
3
- class Mysql2Compiler < GenericCompiler
4
- def limited_update_conditions(conditions, taken)
5
- conditions << " LIMIT #{taken}"
6
- conditions
7
- end
8
- end
9
- end
10
- end
11
-
@@ -1,5 +0,0 @@
1
- # Loaded by script/console. Land helpers here.
2
-
3
- Pry.config.prompt = lambda do |context, nesting, pry|
4
- "[mysql2] #{context}> "
5
- end
@@ -1,17 +0,0 @@
1
- root:
2
- host: localhost
3
- username: root
4
- password:
5
- database: test
6
-
7
- user:
8
- host: localhost
9
- username: LOCALUSERNAME
10
- password:
11
- database: mysql2_test
12
-
13
- numericuser:
14
- host: localhost
15
- username: LOCALUSERNAME
16
- password:
17
- database: 12345
data/spec/my.cnf.example DELETED
@@ -1,9 +0,0 @@
1
- [root]
2
- host=localhost
3
- user=LOCALUSERNAME
4
- password=
5
-
6
- [client]
7
- host=localhost
8
- user=LOCALUSERNAME
9
- password=
data/spec/test_data DELETED
@@ -1 +0,0 @@
1
- \N Hello World
@@ -1,82 +0,0 @@
1
- $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
- require 'mysql2'
3
-
4
- user, pass, host, port = ENV.values_at('user', 'pass', 'host', 'port')
5
-
6
- mysql_to_rb = {
7
- "big5" => "Big5",
8
- "dec8" => "NULL",
9
- "cp850" => "CP850",
10
- "hp8" => "NULL",
11
- "koi8r" => "KOI8-R",
12
- "latin1" => "ISO-8859-1",
13
- "latin2" => "ISO-8859-2",
14
- "swe7" => "NULL",
15
- "ascii" => "US-ASCII",
16
- "ujis" => "eucJP-ms",
17
- "sjis" => "Shift_JIS",
18
- "hebrew" => "ISO-8859-8",
19
- "tis620" => "TIS-620",
20
- "euckr" => "EUC-KR",
21
- "koi8u" => "KOI8-R",
22
- "gb2312" => "GB2312",
23
- "greek" => "ISO-8859-7",
24
- "cp1250" => "Windows-1250",
25
- "gbk" => "GBK",
26
- "latin5" => "ISO-8859-9",
27
- "armscii8" => "NULL",
28
- "utf8" => "UTF-8",
29
- "ucs2" => "UTF-16BE",
30
- "cp866" => "IBM866",
31
- "keybcs2" => "NULL",
32
- "macce" => "macCentEuro",
33
- "macroman" => "macRoman",
34
- "cp852" => "CP852",
35
- "latin7" => "ISO-8859-13",
36
- "utf8mb4" => "UTF-8",
37
- "cp1251" => "Windows-1251",
38
- "utf16" => "UTF-16",
39
- "cp1256" => "Windows-1256",
40
- "cp1257" => "Windows-1257",
41
- "utf32" => "UTF-32",
42
- "binary" => "ASCII-8BIT",
43
- "geostd8" => "NULL",
44
- "cp932" => "Windows-31J",
45
- "eucjpms" => "eucJP-ms"
46
- }
47
-
48
- client = Mysql2::Client.new(:username => user, :password => pass, :host => host, :port => port.to_i)
49
- collations = client.query "SHOW COLLATION", :as => :array
50
- encodings = Array.new(collations.to_a.last[2].to_i)
51
- encodings_with_nil = Array.new(encodings.size)
52
-
53
- collations.each do |collation|
54
- mysql_col_idx = collation[2].to_i
55
- rb_enc = mysql_to_rb[collation[1]]
56
- encodings[mysql_col_idx-1] = [mysql_col_idx, rb_enc]
57
- end
58
-
59
- encodings.each_with_index do |encoding, idx|
60
- encodings_with_nil[idx] = (encoding || [idx, "NULL"])
61
- end
62
-
63
- encodings_with_nil.sort! do |a, b|
64
- a[0] <=> b[0]
65
- end
66
-
67
- encodings_with_nil = encodings_with_nil.map do |encoding|
68
- name = "NULL"
69
-
70
- if !encoding.nil? && encoding[1] != "NULL"
71
- name = "\"#{encoding[1]}\""
72
- end
73
-
74
- " #{name}"
75
- end
76
-
77
- # start printing output
78
-
79
- puts "const char *mysql2_mysql_enc_to_rb[] = {"
80
- puts encodings_with_nil.join(",\n")
81
- puts "};"
82
- puts
@@ -1,61 +0,0 @@
1
- mysql_to_rb = {
2
- "big5" => "Big5",
3
- "dec8" => nil,
4
- "cp850" => "CP850",
5
- "hp8" => nil,
6
- "koi8r" => "KOI8-R",
7
- "latin1" => "ISO-8859-1",
8
- "latin2" => "ISO-8859-2",
9
- "swe7" => nil,
10
- "ascii" => "US-ASCII",
11
- "ujis" => "eucJP-ms",
12
- "sjis" => "Shift_JIS",
13
- "hebrew" => "ISO-8859-8",
14
- "tis620" => "TIS-620",
15
- "euckr" => "EUC-KR",
16
- "koi8u" => "KOI8-R",
17
- "gb2312" => "GB2312",
18
- "greek" => "ISO-8859-7",
19
- "cp1250" => "Windows-1250",
20
- "gbk" => "GBK",
21
- "latin5" => "ISO-8859-9",
22
- "armscii8" => nil,
23
- "utf8" => "UTF-8",
24
- "ucs2" => "UTF-16BE",
25
- "cp866" => "IBM866",
26
- "keybcs2" => nil,
27
- "macce" => "macCentEuro",
28
- "macroman" => "macRoman",
29
- "cp852" => "CP852",
30
- "latin7" => "ISO-8859-13",
31
- "utf8mb4" => "UTF-8",
32
- "cp1251" => "Windows-1251",
33
- "utf16" => "UTF-16",
34
- "cp1256" => "Windows-1256",
35
- "cp1257" => "Windows-1257",
36
- "utf32" => "UTF-32",
37
- "binary" => "ASCII-8BIT",
38
- "geostd8" => nil,
39
- "cp932" => "Windows-31J",
40
- "eucjpms" => "eucJP-ms"
41
- }
42
-
43
- puts <<-header
44
- %readonly-tables
45
- %enum
46
- %define lookup-function-name mysql2_mysql_enc_name_to_rb
47
- %define hash-function-name mysql2_mysql_enc_name_to_rb_hash
48
- %struct-type
49
- struct mysql2_mysql_enc_name_to_rb_map { const char *name; const char *rb_name; }
50
- %%
51
- header
52
-
53
- mysql_to_rb.each do |mysql, ruby|
54
- if ruby.nil?
55
- name = "NULL"
56
- else
57
- name = "\"#{ruby}\""
58
- end
59
-
60
- puts "#{mysql}, #{name}"
61
- end