mysql2 0.3.18-x64-mingw32

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,83 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Mysql2::Error do
6
+ let(:client) { Mysql2::Client.new(DatabaseCredentials['root']) }
7
+
8
+ let :error do
9
+ begin
10
+ client.query("HAHAHA")
11
+ rescue Mysql2::Error => e
12
+ error = e
13
+ ensure
14
+ client.close
15
+ end
16
+
17
+ error
18
+ end
19
+
20
+ 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)
23
+
24
+ # Mysql gem compatibility
25
+ error.should respond_to(:errno)
26
+ error.should respond_to(:error)
27
+ end
28
+
29
+ if "".respond_to? :encoding
30
+ let :error do
31
+ client = Mysql2::Client.new(DatabaseCredentials['root'])
32
+ begin
33
+ client.query("\xE9\x80\xA0\xE5\xAD\x97")
34
+ rescue Mysql2::Error => e
35
+ error = e
36
+ ensure
37
+ client.close
38
+ end
39
+
40
+ error
41
+ end
42
+
43
+ let :bad_err do
44
+ client = Mysql2::Client.new(DatabaseCredentials['root'])
45
+ begin
46
+ client.query("\xE5\xC6\x7D\x1F")
47
+ rescue Mysql2::Error => e
48
+ error = e
49
+ ensure
50
+ client.close
51
+ end
52
+
53
+ error
54
+ end
55
+
56
+ it "returns error messages as UTF-8 by default" do
57
+ with_internal_encoding nil do
58
+ error.message.encoding.should eql(Encoding::UTF_8)
59
+ error.message.valid_encoding?
60
+
61
+ bad_err.message.encoding.should eql(Encoding::UTF_8)
62
+ bad_err.message.valid_encoding?
63
+
64
+ bad_err.message.should include("??}\u001F")
65
+ end
66
+ end
67
+
68
+ it "returns sql state as ASCII" do
69
+ error.sql_state.encoding.should eql(Encoding::US_ASCII)
70
+ error.sql_state.valid_encoding?
71
+ end
72
+
73
+ 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?
77
+
78
+ bad_err.message.encoding.should eql(Encoding.default_internal)
79
+ bad_err.message.valid_encoding?
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,505 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+
4
+ describe Mysql2::Result do
5
+ before(:each) do
6
+ @result = @client.query "SELECT 1"
7
+ end
8
+
9
+ it "should have included Enumerable" do
10
+ Mysql2::Result.ancestors.include?(Enumerable).should be_true
11
+ end
12
+
13
+ it "should respond to #each" do
14
+ @result.should respond_to(:each)
15
+ end
16
+
17
+ it "should raise a Mysql2::Error exception upon a bad query" do
18
+ lambda {
19
+ @client.query "bad sql"
20
+ }.should raise_error(Mysql2::Error)
21
+
22
+ lambda {
23
+ @client.query "SELECT 1"
24
+ }.should_not raise_error(Mysql2::Error)
25
+ end
26
+
27
+ it "should respond to #count, which is aliased as #size" do
28
+ r = @client.query "SELECT 1"
29
+ r.should respond_to :count
30
+ r.should respond_to :size
31
+ end
32
+
33
+ it "should be able to return the number of rows in the result set" do
34
+ r = @client.query "SELECT 1"
35
+ r.count.should eql(1)
36
+ r.size.should eql(1)
37
+ end
38
+
39
+ context "metadata queries" do
40
+ it "should show tables" do
41
+ @result = @client.query "SHOW TABLES"
42
+ end
43
+ end
44
+
45
+ context "#each" do
46
+ it "should yield rows as hash's" do
47
+ @result.each do |row|
48
+ row.class.should eql(Hash)
49
+ end
50
+ end
51
+
52
+ it "should yield rows as hash's with symbol keys if :symbolize_keys was set to true" do
53
+ @result.each(:symbolize_keys => true) do |row|
54
+ row.keys.first.class.should eql(Symbol)
55
+ end
56
+ end
57
+
58
+ it "should be able to return results as an array" do
59
+ @result.each(:as => :array) do |row|
60
+ row.class.should eql(Array)
61
+ end
62
+ end
63
+
64
+ it "should cache previously yielded results by default" do
65
+ @result.first.object_id.should eql(@result.first.object_id)
66
+ end
67
+
68
+ it "should not cache previously yielded results if cache_rows is disabled" do
69
+ result = @client.query "SELECT 1", :cache_rows => false
70
+ result.first.object_id.should_not eql(result.first.object_id)
71
+ end
72
+
73
+ it "should yield different value for #first if streaming" do
74
+ result = @client.query "SELECT 1 UNION SELECT 2", :stream => true, :cache_rows => false
75
+ result.first.should_not eql(result.first)
76
+ end
77
+
78
+ it "should yield the same value for #first if streaming is disabled" do
79
+ result = @client.query "SELECT 1 UNION SELECT 2", :stream => false
80
+ result.first.should eql(result.first)
81
+ end
82
+
83
+ it "should throw an exception if we try to iterate twice when streaming is enabled" do
84
+ result = @client.query "SELECT 1 UNION SELECT 2", :stream => true, :cache_rows => false
85
+
86
+ expect {
87
+ result.each.to_a
88
+ result.each.to_a
89
+ }.to raise_exception(Mysql2::Error)
90
+ end
91
+ end
92
+
93
+ context "#fields" do
94
+ before(:each) do
95
+ @test_result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1")
96
+ end
97
+
98
+ it "method should exist" do
99
+ @test_result.should respond_to(:fields)
100
+ end
101
+
102
+ it "should return an array of field names in proper order" do
103
+ result = @client.query "SELECT 'a', 'b', 'c'"
104
+ result.fields.should eql(['a', 'b', 'c'])
105
+ end
106
+ end
107
+
108
+ context "streaming" do
109
+ it "should maintain a count while streaming" do
110
+ result = @client.query('SELECT 1')
111
+
112
+ result.count.should eql(1)
113
+ result.each.to_a
114
+ result.count.should eql(1)
115
+ end
116
+
117
+ it "should set the actual count of rows after streaming" do
118
+ result = @client.query("SELECT * FROM mysql2_test", :stream => true, :cache_rows => false)
119
+ result.count.should eql(0)
120
+ result.each {|r| }
121
+ result.count.should eql(1)
122
+ end
123
+
124
+ it "should not yield nil at the end of streaming" do
125
+ result = @client.query('SELECT * FROM mysql2_test', :stream => true, :cache_rows => false)
126
+ result.each { |r| r.should_not be_nil}
127
+ end
128
+
129
+ it "#count should be zero for rows after streaming when there were no results" do
130
+ result = @client.query("SELECT * FROM mysql2_test WHERE null_test IS NOT NULL", :stream => true, :cache_rows => false)
131
+ result.count.should eql(0)
132
+ result.each.to_a
133
+ result.count.should eql(0)
134
+ end
135
+
136
+ it "should raise an exception if streaming ended due to a timeout" do
137
+ # Create an extra client instance, since we're going to time it out
138
+ client = Mysql2::Client.new DatabaseCredentials['root']
139
+ client.query "CREATE TEMPORARY TABLE streamingTest (val BINARY(255)) ENGINE=MEMORY"
140
+
141
+ # Insert enough records to force the result set into multiple reads
142
+ # (the BINARY type is used simply because it forces full width results)
143
+ 10000.times do |i|
144
+ client.query "INSERT INTO streamingTest (val) VALUES ('Foo #{i}')"
145
+ end
146
+
147
+ client.query "SET net_write_timeout = 1"
148
+ res = client.query "SELECT * FROM streamingTest", :stream => true, :cache_rows => false
149
+
150
+ lambda {
151
+ res.each_with_index do |row, i|
152
+ # Exhaust the first result packet then trigger a timeout
153
+ sleep 2 if i > 0 && i % 1000 == 0
154
+ end
155
+ }.should raise_error(Mysql2::Error, /Lost connection/)
156
+ end
157
+ end
158
+
159
+ context "row data type mapping" do
160
+ before(:each) do
161
+ @test_result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
162
+ end
163
+
164
+ it "should return nil values for NULL and strings for everything else when :cast is false" do
165
+ 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
166
+ result["null_test"].should be_nil
167
+ result["tiny_int_test"].should eql("1")
168
+ result["bool_cast_test"].should eql("1")
169
+ result["int_test"].should eql("10")
170
+ result["date_test"].should eql("2010-04-04")
171
+ result["enum_test"].should eql("val1")
172
+ end
173
+
174
+ it "should return nil for a NULL value" do
175
+ @test_result['null_test'].class.should eql(NilClass)
176
+ @test_result['null_test'].should eql(nil)
177
+ end
178
+
179
+ it "should return String for a BIT(64) value" do
180
+ @test_result['bit_test'].class.should eql(String)
181
+ @test_result['bit_test'].should eql("\000\000\000\000\000\000\000\005")
182
+ end
183
+
184
+ it "should return String for a BIT(1) value" do
185
+ @test_result['single_bit_test'].class.should eql(String)
186
+ @test_result['single_bit_test'].should eql("\001")
187
+ end
188
+
189
+ it "should return Fixnum for a TINYINT value" do
190
+ [Fixnum, Bignum].should include(@test_result['tiny_int_test'].class)
191
+ @test_result['tiny_int_test'].should eql(1)
192
+ end
193
+
194
+ it "should return TrueClass or FalseClass for a TINYINT value if :cast_booleans is enabled" do
195
+ @client.query 'INSERT INTO mysql2_test (bool_cast_test) VALUES (1)'
196
+ id1 = @client.last_id
197
+ @client.query 'INSERT INTO mysql2_test (bool_cast_test) VALUES (0)'
198
+ id2 = @client.last_id
199
+ @client.query 'INSERT INTO mysql2_test (bool_cast_test) VALUES (-1)'
200
+ id3 = @client.last_id
201
+
202
+ result1 = @client.query 'SELECT bool_cast_test FROM mysql2_test WHERE bool_cast_test = 1 LIMIT 1', :cast_booleans => true
203
+ result2 = @client.query 'SELECT bool_cast_test FROM mysql2_test WHERE bool_cast_test = 0 LIMIT 1', :cast_booleans => true
204
+ result3 = @client.query 'SELECT bool_cast_test FROM mysql2_test WHERE bool_cast_test = -1 LIMIT 1', :cast_booleans => true
205
+ result1.first['bool_cast_test'].should be_true
206
+ result2.first['bool_cast_test'].should be_false
207
+ result3.first['bool_cast_test'].should be_true
208
+
209
+ @client.query "DELETE from mysql2_test WHERE id IN(#{id1},#{id2},#{id3})"
210
+ end
211
+
212
+ it "should return TrueClass or FalseClass for a BIT(1) value if :cast_booleans is enabled" do
213
+ @client.query 'INSERT INTO mysql2_test (single_bit_test) VALUES (1)'
214
+ id1 = @client.last_id
215
+ @client.query 'INSERT INTO mysql2_test (single_bit_test) VALUES (0)'
216
+ id2 = @client.last_id
217
+
218
+ result1 = @client.query "SELECT single_bit_test FROM mysql2_test WHERE id = #{id1}", :cast_booleans => true
219
+ result2 = @client.query "SELECT single_bit_test FROM mysql2_test WHERE id = #{id2}", :cast_booleans => true
220
+ result1.first['single_bit_test'].should be_true
221
+ result2.first['single_bit_test'].should be_false
222
+
223
+ @client.query "DELETE from mysql2_test WHERE id IN(#{id1},#{id2})"
224
+ end
225
+
226
+ it "should return Fixnum for a SMALLINT value" do
227
+ [Fixnum, Bignum].should include(@test_result['small_int_test'].class)
228
+ @test_result['small_int_test'].should eql(10)
229
+ end
230
+
231
+ it "should return Fixnum for a MEDIUMINT value" do
232
+ [Fixnum, Bignum].should include(@test_result['medium_int_test'].class)
233
+ @test_result['medium_int_test'].should eql(10)
234
+ end
235
+
236
+ it "should return Fixnum for an INT value" do
237
+ [Fixnum, Bignum].should include(@test_result['int_test'].class)
238
+ @test_result['int_test'].should eql(10)
239
+ end
240
+
241
+ it "should return Fixnum for a BIGINT value" do
242
+ [Fixnum, Bignum].should include(@test_result['big_int_test'].class)
243
+ @test_result['big_int_test'].should eql(10)
244
+ end
245
+
246
+ it "should return Fixnum for a YEAR value" do
247
+ [Fixnum, Bignum].should include(@test_result['year_test'].class)
248
+ @test_result['year_test'].should eql(2009)
249
+ end
250
+
251
+ it "should return BigDecimal for a DECIMAL value" do
252
+ @test_result['decimal_test'].class.should eql(BigDecimal)
253
+ @test_result['decimal_test'].should eql(10.3)
254
+ end
255
+
256
+ it "should return Float for a FLOAT value" do
257
+ @test_result['float_test'].class.should eql(Float)
258
+ @test_result['float_test'].should eql(10.3)
259
+ end
260
+
261
+ it "should return Float for a DOUBLE value" do
262
+ @test_result['double_test'].class.should eql(Float)
263
+ @test_result['double_test'].should eql(10.3)
264
+ end
265
+
266
+ it "should return Time for a DATETIME value when within the supported range" do
267
+ @test_result['date_time_test'].class.should eql(Time)
268
+ @test_result['date_time_test'].strftime("%Y-%m-%d %H:%M:%S").should eql('2010-04-04 11:44:00')
269
+ end
270
+
271
+ if 1.size == 4 # 32bit
272
+ unless RUBY_VERSION =~ /1.8/
273
+ klass = Time
274
+ else
275
+ klass = DateTime
276
+ end
277
+
278
+ it "should return DateTime when timestamp is < 1901-12-13 20:45:52" do
279
+ # 1901-12-13T20:45:52 is the min for 32bit Ruby 1.8
280
+ r = @client.query("SELECT CAST('1901-12-13 20:45:51' AS DATETIME) as test")
281
+ r.first['test'].class.should eql(klass)
282
+ end
283
+
284
+ it "should return DateTime when timestamp is > 2038-01-19T03:14:07" do
285
+ # 2038-01-19T03:14:07 is the max for 32bit Ruby 1.8
286
+ r = @client.query("SELECT CAST('2038-01-19 03:14:08' AS DATETIME) as test")
287
+ r.first['test'].class.should eql(klass)
288
+ end
289
+ elsif 1.size == 8 # 64bit
290
+ unless RUBY_VERSION =~ /1.8/
291
+ it "should return Time when timestamp is < 1901-12-13 20:45:52" do
292
+ r = @client.query("SELECT CAST('1901-12-13 20:45:51' AS DATETIME) as test")
293
+ r.first['test'].class.should eql(Time)
294
+ end
295
+
296
+ it "should return Time when timestamp is > 2038-01-19T03:14:07" do
297
+ r = @client.query("SELECT CAST('2038-01-19 03:14:08' AS DATETIME) as test")
298
+ r.first['test'].class.should eql(Time)
299
+ end
300
+ else
301
+ it "should return Time when timestamp is > 0138-12-31 11:59:59" do
302
+ r = @client.query("SELECT CAST('0139-1-1 00:00:00' AS DATETIME) as test")
303
+ r.first['test'].class.should eql(Time)
304
+ end
305
+
306
+ it "should return DateTime when timestamp is < 0139-1-1T00:00:00" do
307
+ r = @client.query("SELECT CAST('0138-12-31 11:59:59' AS DATETIME) as test")
308
+ r.first['test'].class.should eql(DateTime)
309
+ end
310
+
311
+ it "should return Time when timestamp is > 2038-01-19T03:14:07" do
312
+ r = @client.query("SELECT CAST('2038-01-19 03:14:08' AS DATETIME) as test")
313
+ r.first['test'].class.should eql(Time)
314
+ end
315
+ end
316
+ end
317
+
318
+ it "should return Time for a TIMESTAMP value when within the supported range" do
319
+ @test_result['timestamp_test'].class.should eql(Time)
320
+ @test_result['timestamp_test'].strftime("%Y-%m-%d %H:%M:%S").should eql('2010-04-04 11:44:00')
321
+ end
322
+
323
+ it "should return Time for a TIME value" do
324
+ @test_result['time_test'].class.should eql(Time)
325
+ @test_result['time_test'].strftime("%Y-%m-%d %H:%M:%S").should eql('2000-01-01 11:44:00')
326
+ end
327
+
328
+ it "should return Date for a DATE value" do
329
+ @test_result['date_test'].class.should eql(Date)
330
+ @test_result['date_test'].strftime("%Y-%m-%d").should eql('2010-04-04')
331
+ end
332
+
333
+ it "should return String for an ENUM value" do
334
+ @test_result['enum_test'].class.should eql(String)
335
+ @test_result['enum_test'].should eql('val1')
336
+ end
337
+
338
+ it "should raise an error given an invalid DATETIME" do
339
+ begin
340
+ @client.query("SELECT CAST('1972-00-27 00:00:00' AS DATETIME) as bad_datetime").each
341
+ rescue Mysql2::Error => e
342
+ error = e
343
+ end
344
+
345
+ error.message.should eql("Invalid date in field 'bad_datetime': 1972-00-27 00:00:00")
346
+ end
347
+
348
+ if defined? Encoding
349
+ context "string encoding for ENUM values" do
350
+ it "should default to the connection's encoding if Encoding.default_internal is nil" do
351
+ with_internal_encoding nil do
352
+ result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
353
+ result['enum_test'].encoding.should eql(Encoding.find('utf-8'))
354
+
355
+ client2 = Mysql2::Client.new(DatabaseCredentials['root'].merge(:encoding => 'ascii'))
356
+ result = client2.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
357
+ result['enum_test'].encoding.should eql(Encoding.find('us-ascii'))
358
+ client2.close
359
+ end
360
+ end
361
+
362
+ it "should use Encoding.default_internal" do
363
+ with_internal_encoding 'utf-8' do
364
+ result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
365
+ result['enum_test'].encoding.should eql(Encoding.default_internal)
366
+ end
367
+
368
+ with_internal_encoding 'us-ascii' do
369
+ result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
370
+ result['enum_test'].encoding.should eql(Encoding.default_internal)
371
+ end
372
+ end
373
+ end
374
+ end
375
+
376
+ it "should return String for a SET value" do
377
+ @test_result['set_test'].class.should eql(String)
378
+ @test_result['set_test'].should eql('val1,val2')
379
+ end
380
+
381
+ if defined? Encoding
382
+ context "string encoding for SET values" do
383
+ it "should default to the connection's encoding if Encoding.default_internal is nil" do
384
+ with_internal_encoding nil do
385
+ result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
386
+ result['set_test'].encoding.should eql(Encoding.find('utf-8'))
387
+
388
+ client2 = Mysql2::Client.new(DatabaseCredentials['root'].merge(:encoding => 'ascii'))
389
+ result = client2.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
390
+ result['set_test'].encoding.should eql(Encoding.find('us-ascii'))
391
+ client2.close
392
+ end
393
+ end
394
+
395
+ it "should use Encoding.default_internal" do
396
+ with_internal_encoding 'utf-8' do
397
+ result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
398
+ result['set_test'].encoding.should eql(Encoding.default_internal)
399
+ end
400
+
401
+ with_internal_encoding 'us-ascii' do
402
+ result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
403
+ result['set_test'].encoding.should eql(Encoding.default_internal)
404
+ end
405
+ end
406
+ end
407
+ end
408
+
409
+ it "should return String for a BINARY value" do
410
+ @test_result['binary_test'].class.should eql(String)
411
+ @test_result['binary_test'].should eql("test#{"\000"*6}")
412
+ end
413
+
414
+ if defined? Encoding
415
+ context "string encoding for BINARY values" do
416
+ it "should default to binary if Encoding.default_internal is nil" do
417
+ with_internal_encoding nil do
418
+ result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
419
+ result['binary_test'].encoding.should eql(Encoding.find('binary'))
420
+ end
421
+ end
422
+
423
+ it "should not use Encoding.default_internal" do
424
+ with_internal_encoding 'utf-8' do
425
+ result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
426
+ result['binary_test'].encoding.should eql(Encoding.find('binary'))
427
+ end
428
+
429
+ with_internal_encoding 'us-ascii' do
430
+ result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
431
+ result['binary_test'].encoding.should eql(Encoding.find('binary'))
432
+ end
433
+ end
434
+ end
435
+ end
436
+
437
+ {
438
+ 'char_test' => 'CHAR',
439
+ 'varchar_test' => 'VARCHAR',
440
+ 'varbinary_test' => 'VARBINARY',
441
+ 'tiny_blob_test' => 'TINYBLOB',
442
+ 'tiny_text_test' => 'TINYTEXT',
443
+ 'blob_test' => 'BLOB',
444
+ 'text_test' => 'TEXT',
445
+ 'medium_blob_test' => 'MEDIUMBLOB',
446
+ 'medium_text_test' => 'MEDIUMTEXT',
447
+ 'long_blob_test' => 'LONGBLOB',
448
+ 'long_text_test' => 'LONGTEXT'
449
+ }.each do |field, type|
450
+ it "should return a String for #{type}" do
451
+ @test_result[field].class.should eql(String)
452
+ @test_result[field].should eql("test")
453
+ end
454
+
455
+ if defined? Encoding
456
+ context "string encoding for #{type} values" do
457
+ if ['VARBINARY', 'TINYBLOB', 'BLOB', 'MEDIUMBLOB', 'LONGBLOB'].include?(type)
458
+ it "should default to binary if Encoding.default_internal is nil" do
459
+ with_internal_encoding nil do
460
+ result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
461
+ result['binary_test'].encoding.should eql(Encoding.find('binary'))
462
+ end
463
+ end
464
+
465
+ it "should not use Encoding.default_internal" do
466
+ with_internal_encoding 'utf-8' do
467
+ result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
468
+ result['binary_test'].encoding.should eql(Encoding.find('binary'))
469
+ end
470
+
471
+ with_internal_encoding 'us-ascii' do
472
+ result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
473
+ result['binary_test'].encoding.should eql(Encoding.find('binary'))
474
+ end
475
+ end
476
+ else
477
+ it "should default to utf-8 if Encoding.default_internal is nil" do
478
+ with_internal_encoding nil do
479
+ result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
480
+ result[field].encoding.should eql(Encoding.find('utf-8'))
481
+
482
+ client2 = Mysql2::Client.new(DatabaseCredentials['root'].merge(:encoding => 'ascii'))
483
+ result = client2.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
484
+ result[field].encoding.should eql(Encoding.find('us-ascii'))
485
+ client2.close
486
+ end
487
+ end
488
+
489
+ it "should use Encoding.default_internal" do
490
+ with_internal_encoding 'utf-8' do
491
+ result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
492
+ result[field].encoding.should eql(Encoding.default_internal)
493
+ end
494
+
495
+ with_internal_encoding 'us-ascii' do
496
+ result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
497
+ result[field].encoding.should eql(Encoding.default_internal)
498
+ end
499
+ end
500
+ end
501
+ end
502
+ end
503
+ end
504
+ end
505
+ end