mysql2 0.5.2 → 0.5.4
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 +5 -5
- data/README.md +76 -34
- data/ext/mysql2/client.c +123 -25
- data/ext/mysql2/extconf.rb +23 -6
- data/ext/mysql2/mysql2_ext.c +6 -1
- data/ext/mysql2/mysql_enc_name_to_ruby.h +60 -56
- data/ext/mysql2/mysql_enc_to_ruby.h +56 -5
- data/ext/mysql2/result.c +230 -15
- data/ext/mysql2/result.h +1 -0
- data/ext/mysql2/statement.c +14 -4
- data/lib/mysql2/client.rb +20 -3
- data/lib/mysql2/error.rb +4 -3
- data/lib/mysql2/statement.rb +1 -3
- data/lib/mysql2/version.rb +1 -1
- data/lib/mysql2.rb +7 -3
- data/support/3A79BD29.asc +49 -0
- data/support/5072E1F5.asc +5 -5
- data/support/mysql_enc_to_ruby.rb +6 -1
- data/support/ruby_enc_to_mysql.rb +2 -0
- metadata +10 -55
- data/examples/eventmachine.rb +0 -19
- data/examples/threaded.rb +0 -16
- data/spec/configuration.yml.example +0 -11
- data/spec/em/em_spec.rb +0 -135
- data/spec/my.cnf.example +0 -9
- data/spec/mysql2/client_spec.rb +0 -1072
- data/spec/mysql2/error_spec.rb +0 -78
- data/spec/mysql2/result_spec.rb +0 -485
- data/spec/mysql2/statement_spec.rb +0 -712
- data/spec/rcov.opts +0 -3
- data/spec/spec_helper.rb +0 -112
- data/spec/ssl/ca-cert.pem +0 -17
- data/spec/ssl/ca-key.pem +0 -27
- data/spec/ssl/ca.cnf +0 -22
- data/spec/ssl/cert.cnf +0 -22
- data/spec/ssl/client-cert.pem +0 -17
- data/spec/ssl/client-key.pem +0 -27
- data/spec/ssl/client-req.pem +0 -15
- data/spec/ssl/gen_certs.sh +0 -48
- data/spec/ssl/pkcs8-client-key.pem +0 -28
- data/spec/ssl/pkcs8-server-key.pem +0 -28
- data/spec/ssl/server-cert.pem +0 -17
- data/spec/ssl/server-key.pem +0 -27
- data/spec/ssl/server-req.pem +0 -15
- data/spec/test_data +0 -1
data/ext/mysql2/extconf.rb
CHANGED
|
@@ -7,7 +7,7 @@ def asplode(lib)
|
|
|
7
7
|
elsif RUBY_PLATFORM =~ /darwin/
|
|
8
8
|
abort "-----\n#{lib} is missing. You may need to 'brew install mysql' or 'port install mysql', and try again.\n-----"
|
|
9
9
|
else
|
|
10
|
-
abort "-----\n#{lib} is missing. You may need to 'apt-get install libmysqlclient-dev' or 'yum install mysql-devel', and try again.\n-----"
|
|
10
|
+
abort "-----\n#{lib} is missing. You may need to 'sudo apt-get install libmariadb-dev', 'sudo apt-get install libmysqlclient-dev' or 'sudo yum install mysql-devel', and try again.\n-----"
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
13
|
|
|
@@ -15,10 +15,21 @@ def add_ssl_defines(header)
|
|
|
15
15
|
all_modes_found = %w[SSL_MODE_DISABLED SSL_MODE_PREFERRED SSL_MODE_REQUIRED SSL_MODE_VERIFY_CA SSL_MODE_VERIFY_IDENTITY].inject(true) do |m, ssl_mode|
|
|
16
16
|
m && have_const(ssl_mode, header)
|
|
17
17
|
end
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
if all_modes_found
|
|
19
|
+
$CFLAGS << ' -DFULL_SSL_MODE_SUPPORT'
|
|
20
|
+
else
|
|
21
|
+
# if we only have ssl toggle (--ssl,--disable-ssl) from 5.7.3 to 5.7.10
|
|
22
|
+
# and the verify server cert option. This is also the case for MariaDB.
|
|
23
|
+
has_verify_support = have_const('MYSQL_OPT_SSL_VERIFY_SERVER_CERT', header)
|
|
24
|
+
has_enforce_support = have_const('MYSQL_OPT_SSL_ENFORCE', header)
|
|
25
|
+
$CFLAGS << ' -DNO_SSL_MODE_SUPPORT' if !has_verify_support && !has_enforce_support
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Homebrew openssl
|
|
30
|
+
if RUBY_PLATFORM =~ /darwin/ && system("command -v brew")
|
|
31
|
+
openssl_location = `brew --prefix openssl`.strip
|
|
32
|
+
$LDFLAGS << " -L#{openssl_location}/lib" if openssl_location
|
|
22
33
|
end
|
|
23
34
|
|
|
24
35
|
# 2.1+
|
|
@@ -28,6 +39,8 @@ have_func('rb_absint_singlebit_p')
|
|
|
28
39
|
# Missing in RBX (https://github.com/rubinius/rubinius/issues/3771)
|
|
29
40
|
have_func('rb_wait_for_single_fd')
|
|
30
41
|
|
|
42
|
+
have_func("rb_enc_interned_str", "ruby.h")
|
|
43
|
+
|
|
31
44
|
# borrowed from mysqlplus
|
|
32
45
|
# http://github.com/oldmoe/mysqlplus/blob/master/ext/extconf.rb
|
|
33
46
|
dirs = ENV.fetch('PATH').split(File::PATH_SEPARATOR) + %w[
|
|
@@ -42,6 +55,9 @@ dirs = ENV.fetch('PATH').split(File::PATH_SEPARATOR) + %w[
|
|
|
42
55
|
/usr/local/mysql-*
|
|
43
56
|
/usr/local/lib/mysql5*
|
|
44
57
|
/usr/local/opt/mysql5*
|
|
58
|
+
/usr/local/opt/mysql@*
|
|
59
|
+
/usr/local/opt/mysql-client
|
|
60
|
+
/usr/local/opt/mysql-client@*
|
|
45
61
|
].map { |dir| dir << '/bin' }
|
|
46
62
|
|
|
47
63
|
# For those without HOMEBREW_ROOT in PATH
|
|
@@ -108,6 +124,7 @@ have_struct_member('MYSQL', 'net.vio', mysql_h)
|
|
|
108
124
|
have_struct_member('MYSQL', 'net.pvio', mysql_h)
|
|
109
125
|
|
|
110
126
|
# These constants are actually enums, so they cannot be detected by #ifdef in C code.
|
|
127
|
+
have_const('MYSQL_DEFAULT_AUTH', mysql_h)
|
|
111
128
|
have_const('MYSQL_ENABLE_CLEARTEXT_PLUGIN', mysql_h)
|
|
112
129
|
have_const('SERVER_QUERY_NO_GOOD_INDEX_USED', mysql_h)
|
|
113
130
|
have_const('SERVER_QUERY_NO_INDEX_USED', mysql_h)
|
|
@@ -148,7 +165,7 @@ end
|
|
|
148
165
|
$CFLAGS << ' ' << usable_flags.join(' ')
|
|
149
166
|
|
|
150
167
|
enabled_sanitizers = disabled_sanitizers = []
|
|
151
|
-
# Specify a
|
|
168
|
+
# Specify a comma-separated list of sanitizers, or try them all by default
|
|
152
169
|
sanitizers = with_config('sanitize')
|
|
153
170
|
case sanitizers
|
|
154
171
|
when true
|
data/ext/mysql2/mysql2_ext.c
CHANGED
|
@@ -4,9 +4,14 @@ VALUE mMysql2, cMysql2Error, cMysql2TimeoutError;
|
|
|
4
4
|
|
|
5
5
|
/* Ruby Extension initializer */
|
|
6
6
|
void Init_mysql2() {
|
|
7
|
-
mMysql2
|
|
7
|
+
mMysql2 = rb_define_module("Mysql2");
|
|
8
|
+
rb_global_variable(&mMysql2);
|
|
9
|
+
|
|
8
10
|
cMysql2Error = rb_const_get(mMysql2, rb_intern("Error"));
|
|
11
|
+
rb_global_variable(&cMysql2Error);
|
|
12
|
+
|
|
9
13
|
cMysql2TimeoutError = rb_const_get(cMysql2Error, rb_intern("TimeoutError"));
|
|
14
|
+
rb_global_variable(&cMysql2TimeoutError);
|
|
10
15
|
|
|
11
16
|
init_mysql2_client();
|
|
12
17
|
init_mysql2_result();
|
|
@@ -30,7 +30,7 @@ error "gperf generated tables don't work with this execution character set. Plea
|
|
|
30
30
|
#endif
|
|
31
31
|
|
|
32
32
|
struct mysql2_mysql_enc_name_to_rb_map { const char *name; const char *rb_name; };
|
|
33
|
-
/* maximum key range =
|
|
33
|
+
/* maximum key range = 71, duplicates = 0 */
|
|
34
34
|
|
|
35
35
|
#ifdef __GNUC__
|
|
36
36
|
__inline
|
|
@@ -46,32 +46,32 @@ mysql2_mysql_enc_name_to_rb_hash (str, len)
|
|
|
46
46
|
{
|
|
47
47
|
static const unsigned char asso_values[] =
|
|
48
48
|
{
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
0,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
10, 0,
|
|
60
|
-
0,
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
49
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
50
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
51
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
52
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
53
|
+
74, 74, 74, 74, 74, 74, 74, 74, 15, 5,
|
|
54
|
+
0, 74, 5, 25, 40, 10, 20, 50, 74, 74,
|
|
55
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
56
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
57
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
58
|
+
74, 74, 74, 74, 74, 74, 74, 40, 5, 0,
|
|
59
|
+
15, 10, 0, 0, 0, 5, 74, 0, 25, 5,
|
|
60
|
+
0, 5, 74, 74, 20, 5, 5, 0, 74, 45,
|
|
61
|
+
74, 0, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
62
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
63
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
64
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
65
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
66
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
67
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
68
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
69
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
70
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
71
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
72
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
73
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
74
|
+
74, 74, 74, 74, 74, 74
|
|
75
75
|
};
|
|
76
76
|
return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[0]] + asso_values[(unsigned char)str[len - 1]];
|
|
77
77
|
}
|
|
@@ -89,11 +89,11 @@ mysql2_mysql_enc_name_to_rb (str, len)
|
|
|
89
89
|
{
|
|
90
90
|
enum
|
|
91
91
|
{
|
|
92
|
-
TOTAL_KEYWORDS =
|
|
92
|
+
TOTAL_KEYWORDS = 41,
|
|
93
93
|
MIN_WORD_LENGTH = 3,
|
|
94
94
|
MAX_WORD_LENGTH = 8,
|
|
95
95
|
MIN_HASH_VALUE = 3,
|
|
96
|
-
MAX_HASH_VALUE =
|
|
96
|
+
MAX_HASH_VALUE = 73
|
|
97
97
|
};
|
|
98
98
|
|
|
99
99
|
static const struct mysql2_mysql_enc_name_to_rb_map wordlist[] =
|
|
@@ -101,54 +101,58 @@ mysql2_mysql_enc_name_to_rb (str, len)
|
|
|
101
101
|
{""}, {""}, {""},
|
|
102
102
|
{"gbk", "GBK"},
|
|
103
103
|
{""},
|
|
104
|
-
{"
|
|
104
|
+
{"utf32", "UTF-32"},
|
|
105
105
|
{"gb2312", "GB2312"},
|
|
106
106
|
{"keybcs2", NULL},
|
|
107
107
|
{""},
|
|
108
108
|
{"ucs2", "UTF-16BE"},
|
|
109
109
|
{"koi8u", "KOI8-R"},
|
|
110
110
|
{"binary", "ASCII-8BIT"},
|
|
111
|
-
{"
|
|
112
|
-
{""},
|
|
111
|
+
{"utf8mb4", "UTF-8"},
|
|
112
|
+
{"macroman", "macRoman"},
|
|
113
113
|
{"ujis", "eucJP-ms"},
|
|
114
|
-
{"
|
|
114
|
+
{"greek", "ISO-8859-7"},
|
|
115
115
|
{"cp1251", "Windows-1251"},
|
|
116
|
-
{"
|
|
116
|
+
{"utf16le", "UTF-16LE"},
|
|
117
117
|
{""},
|
|
118
118
|
{"sjis", "Shift_JIS"},
|
|
119
119
|
{"macce", "macCentEuro"},
|
|
120
|
-
{"
|
|
120
|
+
{"cp1257", "Windows-1257"},
|
|
121
|
+
{"eucjpms", "eucJP-ms"},
|
|
122
|
+
{""},
|
|
123
|
+
{"utf8", "UTF-8"},
|
|
124
|
+
{"cp852", "CP852"},
|
|
125
|
+
{"cp1250", "Windows-1250"},
|
|
126
|
+
{"gb18030", "GB18030"},
|
|
121
127
|
{""},
|
|
122
|
-
{"macroman", "macRoman"},
|
|
123
|
-
{"dec8", NULL},
|
|
124
|
-
{"utf32", "UTF-32"},
|
|
125
|
-
{"latin1", "ISO-8859-1"},
|
|
126
|
-
{"utf8mb4", "UTF-8"},
|
|
127
|
-
{"hp8", NULL},
|
|
128
128
|
{"swe7", NULL},
|
|
129
|
+
{"koi8r", "KOI8-R"},
|
|
130
|
+
{"tis620", "TIS-620"},
|
|
131
|
+
{"geostd8", NULL},
|
|
132
|
+
{""},
|
|
133
|
+
{"big5", "Big5"},
|
|
129
134
|
{"euckr", "EUC-KR"},
|
|
130
|
-
{"
|
|
135
|
+
{"latin2", "ISO-8859-2"},
|
|
131
136
|
{""}, {""},
|
|
132
|
-
{"
|
|
133
|
-
{"
|
|
134
|
-
{"
|
|
135
|
-
{""},
|
|
136
|
-
{"
|
|
137
|
+
{"dec8", NULL},
|
|
138
|
+
{"cp850", "CP850"},
|
|
139
|
+
{"latin1", "ISO-8859-1"},
|
|
140
|
+
{""},
|
|
141
|
+
{"hp8", NULL},
|
|
142
|
+
{""},
|
|
143
|
+
{"utf16", "UTF-16"},
|
|
137
144
|
{"latin7", "ISO-8859-13"},
|
|
138
145
|
{""}, {""}, {""},
|
|
139
146
|
{"ascii", "US-ASCII"},
|
|
140
|
-
{"
|
|
141
|
-
{""}, {""},
|
|
142
|
-
{"big5", "Big5"},
|
|
143
|
-
{"utf16", "UTF-16"},
|
|
144
|
-
{"cp1250", "Windows-1250"},
|
|
145
|
-
{""}, {""}, {""},
|
|
146
|
-
{"cp850", "CP850"},
|
|
147
|
-
{"tis620", "TIS-620"},
|
|
147
|
+
{"cp1256", "Windows-1256"},
|
|
148
148
|
{""}, {""}, {""},
|
|
149
149
|
{"cp932", "Windows-31J"},
|
|
150
|
+
{"hebrew", "ISO-8859-8"},
|
|
151
|
+
{""}, {""}, {""}, {""},
|
|
150
152
|
{"latin5", "ISO-8859-9"},
|
|
151
|
-
{""}, {""}, {""},
|
|
153
|
+
{""}, {""}, {""},
|
|
154
|
+
{"cp866", "IBM866"},
|
|
155
|
+
{""}, {""}, {""}, {""}, {""}, {""}, {""},
|
|
152
156
|
{"armscii8", NULL}
|
|
153
157
|
};
|
|
154
158
|
|
|
@@ -54,13 +54,13 @@ static const char *mysql2_mysql_enc_to_rb[] = {
|
|
|
54
54
|
"macRoman",
|
|
55
55
|
"UTF-16",
|
|
56
56
|
"UTF-16",
|
|
57
|
-
"",
|
|
57
|
+
"UTF-16LE",
|
|
58
58
|
"Windows-1256",
|
|
59
59
|
"Windows-1257",
|
|
60
60
|
"Windows-1257",
|
|
61
61
|
"UTF-32",
|
|
62
62
|
"UTF-32",
|
|
63
|
-
"",
|
|
63
|
+
"UTF-16LE",
|
|
64
64
|
"ASCII-8BIT",
|
|
65
65
|
NULL,
|
|
66
66
|
"US-ASCII",
|
|
@@ -74,7 +74,7 @@ static const char *mysql2_mysql_enc_to_rb[] = {
|
|
|
74
74
|
NULL,
|
|
75
75
|
"KOI8-R",
|
|
76
76
|
"KOI8-R",
|
|
77
|
-
|
|
77
|
+
"UTF-8",
|
|
78
78
|
"ISO-8859-2",
|
|
79
79
|
"ISO-8859-9",
|
|
80
80
|
"ISO-8859-13",
|
|
@@ -246,14 +246,65 @@ static const char *mysql2_mysql_enc_to_rb[] = {
|
|
|
246
246
|
"UTF-8",
|
|
247
247
|
"UTF-8",
|
|
248
248
|
"UTF-8",
|
|
249
|
+
"GB18030",
|
|
250
|
+
"GB18030",
|
|
251
|
+
"GB18030",
|
|
252
|
+
NULL,
|
|
253
|
+
NULL,
|
|
249
254
|
NULL,
|
|
250
255
|
NULL,
|
|
256
|
+
"UTF-8",
|
|
257
|
+
"UTF-8",
|
|
258
|
+
"UTF-8",
|
|
259
|
+
"UTF-8",
|
|
260
|
+
"UTF-8",
|
|
261
|
+
"UTF-8",
|
|
262
|
+
"UTF-8",
|
|
263
|
+
"UTF-8",
|
|
264
|
+
"UTF-8",
|
|
265
|
+
"UTF-8",
|
|
266
|
+
"UTF-8",
|
|
267
|
+
"UTF-8",
|
|
268
|
+
"UTF-8",
|
|
269
|
+
"UTF-8",
|
|
270
|
+
"UTF-8",
|
|
271
|
+
"UTF-8",
|
|
272
|
+
"UTF-8",
|
|
273
|
+
NULL,
|
|
274
|
+
"UTF-8",
|
|
275
|
+
"UTF-8",
|
|
276
|
+
"UTF-8",
|
|
251
277
|
NULL,
|
|
278
|
+
"UTF-8",
|
|
279
|
+
"UTF-8",
|
|
280
|
+
"UTF-8",
|
|
281
|
+
"UTF-8",
|
|
282
|
+
"UTF-8",
|
|
283
|
+
"UTF-8",
|
|
284
|
+
"UTF-8",
|
|
285
|
+
"UTF-8",
|
|
286
|
+
"UTF-8",
|
|
287
|
+
"UTF-8",
|
|
288
|
+
"UTF-8",
|
|
289
|
+
"UTF-8",
|
|
290
|
+
"UTF-8",
|
|
291
|
+
"UTF-8",
|
|
292
|
+
"UTF-8",
|
|
293
|
+
"UTF-8",
|
|
294
|
+
"UTF-8",
|
|
295
|
+
"UTF-8",
|
|
252
296
|
NULL,
|
|
297
|
+
"UTF-8",
|
|
298
|
+
"UTF-8",
|
|
299
|
+
"UTF-8",
|
|
253
300
|
NULL,
|
|
301
|
+
"UTF-8",
|
|
254
302
|
NULL,
|
|
255
303
|
NULL,
|
|
304
|
+
"UTF-8",
|
|
305
|
+
"UTF-8",
|
|
306
|
+
"UTF-8",
|
|
307
|
+
"UTF-8",
|
|
308
|
+
"UTF-8",
|
|
256
309
|
"UTF-8"
|
|
257
310
|
};
|
|
258
|
-
|
|
259
|
-
#define CHARSETNR_SIZE (sizeof(mysql2_mysql_enc_to_rb)/sizeof(mysql2_mysql_enc_to_rb[0]))
|