ruby-mysql 2.11.0 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/test/test_mysql.rb CHANGED
@@ -20,28 +20,71 @@ MYSQL_SOCKET = ENV['MYSQL_SOCKET']
20
20
  class TestMysql < Test::Unit::TestCase
21
21
  sub_test_case 'Mysql::VERSION' do
22
22
  test 'returns client version' do
23
- assert{ Mysql::VERSION == 21100 }
23
+ assert{ Mysql::VERSION == '3.0.1' }
24
24
  end
25
25
  end
26
26
 
27
- sub_test_case 'Mysql.init' do
27
+ sub_test_case 'Mysql.new' do
28
28
  test 'returns Mysql object' do
29
- assert{ Mysql.init.kind_of? Mysql }
29
+ assert{ Mysql.new.kind_of? Mysql }
30
30
  end
31
31
  end
32
32
 
33
- sub_test_case 'Mysql.real_connect' do
34
- test 'connect to mysqld' do
35
- @m = Mysql.real_connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
36
- assert{ @m.kind_of? Mysql }
37
- end
38
-
39
- test 'flag argument affects' do
40
- @m = Mysql.real_connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET, Mysql::CLIENT_FOUND_ROWS)
41
- @m.query 'create temporary table t (c int)'
42
- @m.query 'insert into t values (123)'
43
- @m.query 'update t set c=123'
44
- assert{ @m.affected_rows == 1 }
33
+ sub_test_case 'arguments' do
34
+ test 'with fixed arguments' do
35
+ @m = Mysql.new('127.0.0.1', 'hoge', 'abc&def', 'test', 3306, '/tmp/socket', 12345)
36
+ assert{ @m.host == '127.0.0.1' }
37
+ assert{ @m.username == 'hoge' }
38
+ assert{ @m.password == 'abc&def' }
39
+ assert{ @m.database == 'test' }
40
+ assert{ @m.port == 3306 }
41
+ assert{ @m.socket == '/tmp/socket' }
42
+ assert{ @m.flags == 12345 }
43
+ end
44
+
45
+ test 'with keyword arguments' do
46
+ @m = Mysql.new(host: '127.0.0.1', username: 'hoge', password: 'abc&def', database: 'test', port: 3306, socket: '/tmp/socket', flags: 12345)
47
+ assert{ @m.host == '127.0.0.1' }
48
+ assert{ @m.username == 'hoge' }
49
+ assert{ @m.password == 'abc&def' }
50
+ assert{ @m.database == 'test' }
51
+ assert{ @m.port == 3306 }
52
+ assert{ @m.socket == '/tmp/socket' }
53
+ assert{ @m.flags == 12345 }
54
+ end
55
+
56
+ test 'with URI' do
57
+ uri = URI.parse("mysql://hoge:abc%26def@127.0.0.1:3306/test?socket=/tmp/socket&flags=12345")
58
+ @m = Mysql.new(uri)
59
+ assert{ @m.host == '127.0.0.1' }
60
+ assert{ @m.username == 'hoge' }
61
+ assert{ @m.password == 'abc&def' }
62
+ assert{ @m.database == 'test' }
63
+ assert{ @m.port == 3306 }
64
+ assert{ @m.socket == '/tmp/socket' }
65
+ assert{ @m.flags == 12345 }
66
+ end
67
+
68
+ test 'with URI string' do
69
+ @m = Mysql.new("mysql://hoge:abc%26def@127.0.0.1:3306/test?socket=/tmp/socket&flags=12345")
70
+ assert{ @m.host == '127.0.0.1' }
71
+ assert{ @m.username == 'hoge' }
72
+ assert{ @m.password == 'abc&def' }
73
+ assert{ @m.database == 'test' }
74
+ assert{ @m.port == 3306 }
75
+ assert{ @m.socket == '/tmp/socket' }
76
+ assert{ @m.flags == 12345 }
77
+ end
78
+
79
+ test 'with URI string: host is filename' do
80
+ @m = Mysql.new("mysql://hoge:abc%26def@%2Ftmp%2Fsocket:3306/test?flags=12345")
81
+ assert{ @m.host == '' }
82
+ assert{ @m.username == 'hoge' }
83
+ assert{ @m.password == 'abc&def' }
84
+ assert{ @m.database == 'test' }
85
+ assert{ @m.port == 3306 }
86
+ assert{ @m.socket == '/tmp/socket' }
87
+ assert{ @m.flags == 12345 }
45
88
  end
46
89
 
47
90
  teardown do
@@ -55,16 +98,14 @@ class TestMysql < Test::Unit::TestCase
55
98
  assert{ @m.kind_of? Mysql }
56
99
  end
57
100
 
58
- teardown do
59
- @m.close if @m
101
+ test 'flag argument affects' do
102
+ @m = Mysql.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET, Mysql::CLIENT_FOUND_ROWS)
103
+ @m.query 'create temporary table t (c int)'
104
+ @m.query 'insert into t values (123)'
105
+ @m.query 'update t set c=123'
106
+ assert{ @m.affected_rows == 1 }
60
107
  end
61
- end
62
108
 
63
- sub_test_case 'Mysql.new' do
64
- test 'connect to mysqld' do
65
- @m = Mysql.new(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
66
- assert{ @m.kind_of? Mysql }
67
- end
68
109
  teardown do
69
110
  @m.close if @m
70
111
  end
@@ -82,64 +123,41 @@ class TestMysql < Test::Unit::TestCase
82
123
  end
83
124
  end
84
125
 
85
- sub_test_case 'Mysql.client_info' do
86
- test 'returns client version as string' do
87
- assert{ Mysql.client_info == '5.0.0' }
88
- end
89
- end
90
-
91
- sub_test_case 'Mysql.get_client_info' do
92
- test 'returns client version as string' do
93
- assert{ Mysql.get_client_info == '5.0.0' }
94
- end
95
- end
96
-
97
- sub_test_case 'Mysql.client_version' do
98
- test 'returns client version as Integer' do
99
- assert{ Mysql.client_version == 50000 }
126
+ sub_test_case 'Mysql#connect' do
127
+ test 'connect to mysqld' do
128
+ @m = Mysql.new(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
129
+ assert{ @m.connect == @m }
100
130
  end
101
- end
102
131
 
103
- sub_test_case 'Mysql.get_client_version' do
104
- test 'returns client version as Integer' do
105
- assert{ Mysql.client_version == 50000 }
132
+ test 'connect to mysqld by URI' do
133
+ @m = Mysql.new("mysql://#{MYSQL_USER}:#{MYSQL_PASSWORD}@#{MYSQL_SERVER}:#{MYSQL_PORT}/#{MYSQL_DATABASE}?socket=#{MYSQL_SOCKET}")
134
+ assert{ @m.connect == @m }
106
135
  end
107
- end
108
136
 
109
- sub_test_case 'Mysql#real_connect' do
110
- test 'connect to mysqld' do
111
- @m = Mysql.init
112
- assert{ @m.real_connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET) == @m }
113
- end
114
- teardown do
115
- @m.close if @m
137
+ test 'overrides arguments of new method' do
138
+ @m = Mysql.new('example.com', 12345)
139
+ @m.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
116
140
  end
117
- end
118
141
 
119
- sub_test_case 'Mysql#connect' do
120
- test 'connect to mysqld' do
121
- @m = Mysql.init
122
- assert{ @m.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET) == @m }
123
- end
124
142
  teardown do
125
143
  @m.close if @m
126
144
  end
127
145
  end
128
146
 
129
- sub_test_case 'Mysql#options' do
147
+ sub_test_case 'options' do
130
148
  setup do
131
- @m = Mysql.init
149
+ @m = Mysql.new
132
150
  end
133
151
  teardown do
134
152
  @m.close
135
153
  end
136
- test 'INIT_COMMAND: execute query when connecting' do
137
- assert{ @m.options(Mysql::INIT_COMMAND, "SET AUTOCOMMIT=0") == @m }
154
+ test 'init_command: execute query when connecting' do
155
+ @m.init_command = "SET AUTOCOMMIT=0"
138
156
  assert{ @m.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET) == @m }
139
157
  assert{ @m.query('select @@AUTOCOMMIT').fetch_row == ["0"] }
140
158
  end
141
- test 'OPT_CONNECT_TIMEOUT: set timeout for connecting' do
142
- assert{ @m.options(Mysql::OPT_CONNECT_TIMEOUT, 0.1) == @m }
159
+ test 'connect_timeout: set timeout for connecting' do
160
+ @m.connect_timeout = 0.1
143
161
  stub(Socket).tcp{ raise Errno::ETIMEDOUT }
144
162
  stub(Socket).unix{ raise Errno::ETIMEDOUT }
145
163
  assert_raise Mysql::ClientError, 'connection timeout' do
@@ -149,46 +167,59 @@ class TestMysql < Test::Unit::TestCase
149
167
  @m.connect
150
168
  end
151
169
  end
152
- test 'OPT_LOCAL_INFILE: client can execute LOAD DATA LOCAL INFILE query' do
170
+ test 'local_infile: client can execute LOAD DATA LOCAL INFILE query' do
153
171
  require 'tempfile'
154
172
  tmpf = Tempfile.new 'mysql_spec'
155
173
  tmpf.puts "123\tabc\n"
156
174
  tmpf.close
157
- assert{ @m.options(Mysql::OPT_LOCAL_INFILE, true) == @m }
175
+ @m.local_infile = true
158
176
  @m.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
177
+ if @m.query('select @@local_infile').fetch[0] == '0'
178
+ omit 'skip because local_infile variable is false'
179
+ end
159
180
  @m.query('create temporary table t (i int, c char(10))')
160
181
  @m.query("load data local infile '#{tmpf.path}' into table t")
182
+ assert{ @m.info == 'Records: 1 Deleted: 0 Skipped: 0 Warnings: 0' }
161
183
  assert{ @m.query('select * from t').fetch_row == ['123','abc'] }
162
184
  end
163
- test 'OPT_LOAD_DATA_LOCAL_DIR: client can execute LOAD DATA LOCAL INFILE query with specified directory' do
185
+ test 'load_data_local_dir: client can execute LOAD DATA LOCAL INFILE query with specified directory' do
164
186
  require 'tempfile'
165
187
  tmpf = Tempfile.new 'mysql_spec'
166
188
  tmpf.puts "123\tabc\n"
167
189
  tmpf.close
168
- assert{ @m.options(Mysql::OPT_LOAD_DATA_LOCAL_DIR, File.dirname(tmpf.path)) == @m }
190
+ @m.load_data_local_dir = File.dirname(tmpf.path)
169
191
  @m.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
192
+ if @m.query('select @@local_infile').fetch[0] == '0'
193
+ omit 'skip because local_infile variable is false'
194
+ end
170
195
  @m.query('create temporary table t (i int, c char(10))')
171
196
  @m.query("load data local infile '#{tmpf.path}' into table t")
172
197
  assert{ @m.query('select * from t').fetch_row == ['123','abc'] }
173
198
  end
174
- test 'OPT_LOAD_DATA_LOCAL_DIR: client cannot execute LOAD DATA LOCAL INFILE query without specified directory' do
199
+ test 'load_data_local_dir: client cannot execute LOAD DATA LOCAL INFILE query without specified directory' do
175
200
  require 'tempfile'
176
201
  tmpf = Tempfile.new 'mysql_spec'
177
202
  tmpf.puts "123\tabc\n"
178
203
  tmpf.close
179
- assert{ @m.options(Mysql::OPT_LOAD_DATA_LOCAL_DIR, '/hoge') == @m }
204
+ @m.load_data_local_dir = '/hoge'
180
205
  @m.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
206
+ if @m.query('select @@local_infile').fetch[0] == '0'
207
+ omit 'skip because local_infile variable is false'
208
+ end
181
209
  @m.query('create temporary table t (i int, c char(10))')
182
210
  assert_raise Mysql::ClientError::LoadDataLocalInfileRejected, 'LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.' do
183
211
  @m.query("load data local infile '#{tmpf.path}' into table t")
184
212
  end
185
213
  end
186
- test 'without OPT_LOCAL_INFILE and OPT_LOAD_DATA_LOCAL_DIR: client cannot execute LOAD DATA LOCAL INFILE query' do
214
+ test 'without local_infile and load_data_local_dir: client cannot execute LOAD DATA LOCAL INFILE query' do
187
215
  require 'tempfile'
188
216
  tmpf = Tempfile.new 'mysql_spec'
189
217
  tmpf.puts "123\tabc\n"
190
218
  tmpf.close
191
219
  @m.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
220
+ if @m.query('select @@local_infile').fetch[0] == '0'
221
+ omit 'skip because local_infile variable is false'
222
+ end
192
223
  @m.query('create temporary table t (i int, c char(10))')
193
224
  if @m.server_version >= 80000
194
225
  assert_raise Mysql::ServerError, 'Loading local data is disabled; this must be enabled on both the client and server sides' do
@@ -200,18 +231,18 @@ class TestMysql < Test::Unit::TestCase
200
231
  end
201
232
  end
202
233
  end
203
- test 'OPT_READ_TIMEOUT: set timeout for reading packet' do
204
- assert{ @m.options(Mysql::OPT_READ_TIMEOUT, 1) == @m }
234
+ test 'read_timeout: set timeout for reading packet' do
235
+ @m.read_timeout = 1
205
236
  @m.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
206
237
  @m.query("select 123").entries
207
238
  end
208
- test 'OPT_WRITE_TIMEOUT: set timeout for writing packet' do
209
- assert{ @m.options(Mysql::OPT_WRITE_TIMEOUT, 1) == @m }
239
+ test 'write_timeout: set timeout for writing packet' do
240
+ @m.write_timeout = 1
210
241
  @m.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
211
242
  @m.query("select 123").entries
212
243
  end
213
- test 'SET_CHARSET_NAME: set charset for connection' do
214
- assert{ @m.options(Mysql::SET_CHARSET_NAME, 'utf8mb3') == @m }
244
+ test 'charset: set charset for connection' do
245
+ @m.charset = 'utf8mb3'
215
246
  @m.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
216
247
  assert do
217
248
  @m.query('select @@character_set_connection').fetch_row == ['utf8mb3'] ||
@@ -222,7 +253,7 @@ class TestMysql < Test::Unit::TestCase
222
253
 
223
254
  sub_test_case 'Mysql' do
224
255
  setup do
225
- @m = Mysql.new(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
256
+ @m = Mysql.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
226
257
  end
227
258
 
228
259
  teardown do
@@ -230,22 +261,9 @@ class TestMysql < Test::Unit::TestCase
230
261
  end
231
262
 
232
263
  sub_test_case '#escape_string' do
233
- if defined? ::Encoding
234
- test 'escape special character for charset' do
235
- @m.charset = 'cp932'
236
- assert{ @m.escape_string("abc'def\"ghi\0jkl%mno_表".encode('cp932')) == "abc\\'def\\\"ghi\\0jkl%mno_表".encode('cp932') }
237
- end
238
- else
239
- test 'raise error if charset is multibyte' do
240
- @m.charset = 'cp932'
241
- assert_raise Mysql::ClientError, 'Mysql#escape_string is called for unsafe multibyte charset' do
242
- @m.escape_string("abc'def\"ghi\0jkl%mno_\x95\\")
243
- end
244
- end
245
- test 'not warn if charset is singlebyte' do
246
- @m.charset = 'latin1'
247
- assert{ @m.escape_string("abc'def\"ghi\0jkl%mno_\x95\\") == "abc\\'def\\\"ghi\\0jkl%mno_\x95\\\\" }
248
- end
264
+ test 'escape special character for charset' do
265
+ @m.charset = 'cp932'
266
+ assert{ @m.escape_string("abc'def\"ghi\0jkl%mno_表".encode('cp932')) == "abc\\'def\\\"ghi\\0jkl%mno_表".encode('cp932') }
249
267
  end
250
268
  end
251
269
 
@@ -255,18 +273,6 @@ class TestMysql < Test::Unit::TestCase
255
273
  end
256
274
  end
257
275
 
258
- sub_test_case '#client_info' do
259
- test 'returns client version as string' do
260
- assert{ @m.client_info == '5.0.0' }
261
- end
262
- end
263
-
264
- sub_test_case '#get_client_info' do
265
- test 'returns client version as string' do
266
- assert{ @m.get_client_info == '5.0.0' }
267
- end
268
- end
269
-
270
276
  sub_test_case '#affected_rows' do
271
277
  test 'returns number of affected rows' do
272
278
  @m.query 'create temporary table t (id int)'
@@ -277,8 +283,8 @@ class TestMysql < Test::Unit::TestCase
277
283
 
278
284
  sub_test_case '#character_set_name' do
279
285
  test 'returns charset name' do
280
- m = Mysql.init
281
- m.options Mysql::SET_CHARSET_NAME, 'cp932'
286
+ m = Mysql.new
287
+ m.charset = 'cp932'
282
288
  m.connect MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET
283
289
  assert{ m.character_set_name == 'cp932' }
284
290
  end
@@ -326,28 +332,6 @@ class TestMysql < Test::Unit::TestCase
326
332
  end
327
333
  end
328
334
 
329
- sub_test_case '#client_version' do
330
- test 'returns client version as Integer' do
331
- assert{ @m.client_version.kind_of? Integer }
332
- end
333
- end
334
-
335
- sub_test_case '#get_client_version' do
336
- test 'returns client version as Integer' do
337
- assert{ @m.get_client_version.kind_of? Integer }
338
- end
339
- end
340
-
341
- sub_test_case '#get_host_info' do
342
- test 'returns connection type as String' do
343
- if MYSQL_SERVER == nil or MYSQL_SERVER == 'localhost'
344
- assert{ @m.get_host_info == 'Localhost via UNIX socket' }
345
- else
346
- assert{ @m.get_host_info == "#{MYSQL_SERVER} via TCP/IP" }
347
- end
348
- end
349
- end
350
-
351
335
  sub_test_case '#host_info' do
352
336
  test 'returns connection type as String' do
353
337
  if MYSQL_SERVER == nil or MYSQL_SERVER == 'localhost'
@@ -358,24 +342,6 @@ class TestMysql < Test::Unit::TestCase
358
342
  end
359
343
  end
360
344
 
361
- sub_test_case '#get_proto_info' do
362
- test 'returns version of connection as Integer' do
363
- assert{ @m.get_proto_info == 10 }
364
- end
365
- end
366
-
367
- sub_test_case '#proto_info' do
368
- test 'returns version of connection as Integer' do
369
- assert{ @m.proto_info == 10 }
370
- end
371
- end
372
-
373
- sub_test_case '#get_server_info' do
374
- test 'returns server version as String' do
375
- assert{ @m.get_server_info =~ /\A\d+\.\d+\.\d+/ }
376
- end
377
- end
378
-
379
345
  sub_test_case '#server_info' do
380
346
  test 'returns server version as String' do
381
347
  assert{ @m.server_info =~ /\A\d+\.\d+\.\d+/ }
@@ -403,7 +369,7 @@ class TestMysql < Test::Unit::TestCase
403
369
 
404
370
  sub_test_case '#kill' do
405
371
  setup do
406
- @m2 = Mysql.new(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
372
+ @m2 = Mysql.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
407
373
  end
408
374
  teardown do
409
375
  @m2.close rescue nil
@@ -413,61 +379,6 @@ class TestMysql < Test::Unit::TestCase
413
379
  end
414
380
  end
415
381
 
416
- sub_test_case '#list_dbs' do
417
- test 'returns database list' do
418
- ret = @m.list_dbs
419
- assert{ ret.kind_of? Array }
420
- assert{ ret.include? MYSQL_DATABASE }
421
- end
422
- test 'with pattern returns databases that matches pattern' do
423
- assert{ @m.list_dbs('info%').include? 'information_schema' }
424
- end
425
- end
426
-
427
- sub_test_case '#list_fields' do
428
- setup do
429
- @m.query 'create temporary table t (i int, c char(10), d date)'
430
- end
431
- test 'returns result set that contains information of fields' do
432
- ret = @m.list_fields('t')
433
- assert{ ret.kind_of? Mysql::Result }
434
- assert{ ret.num_rows == 0 }
435
- assert{ ret.fetch_fields.map{|f|f.name} == ['i','c','d'] }
436
- end
437
- test 'with pattern returns result set that contains information of fields that matches pattern' do
438
- ret = @m.list_fields('t', 'i')
439
- assert{ ret.kind_of? Mysql::Result }
440
- assert{ ret.num_rows == 0 }
441
- ret.fetch_fields.map{|f|f.name} == ['i']
442
- end
443
- end
444
-
445
- sub_test_case '#list_processes' do
446
- test 'returns result set that contains information of all connections' do
447
- ret = @m.list_processes
448
- assert{ ret.kind_of? Mysql::Result }
449
- assert{ ret.find{|r|r[0].to_i == @m.thread_id}[4] == "Processlist" }
450
- end
451
- end
452
-
453
- sub_test_case '#list_tables' do
454
- setup do
455
- @m.query 'create table test_mysql_list_tables (id int)'
456
- end
457
- teardown do
458
- @m.query 'drop table if exists test_mysql_list_tables'
459
- end
460
- test 'returns table list' do
461
- ret = @m.list_tables
462
- assert{ ret.kind_of? Array }
463
- assert{ ret.include? 'test_mysql_list_tables' }
464
- end
465
- test 'with pattern returns lists that matches pattern' do
466
- ret = @m.list_tables '%mysql\_list\_t%'
467
- assert{ ret.include? 'test_mysql_list_tables' }
468
- end
469
- end
470
-
471
382
  sub_test_case '#ping' do
472
383
  test 'returns self' do
473
384
  assert{ @m.ping == @m }
@@ -481,17 +392,8 @@ class TestMysql < Test::Unit::TestCase
481
392
  test 'returns nil if query returns no results' do
482
393
  assert{ @m.query('set @hoge:=123') == nil }
483
394
  end
484
- test 'returns self if query_with_result is false' do
485
- @m.query_with_result = false
486
- assert{ @m.query('select 123') == @m }
487
- @m.store_result
488
- assert{ @m.query('set @hoge:=123') == @m }
489
- end
490
- end
491
-
492
- sub_test_case '#real_query' do
493
- test 'is same as #query' do
494
- assert{ @m.real_query('select 123').kind_of? Mysql::Result }
395
+ test 'returns self if block is specified' do
396
+ assert{ @m.query('select 123'){} == @m }
495
397
  end
496
398
  end
497
399
 
@@ -523,60 +425,12 @@ class TestMysql < Test::Unit::TestCase
523
425
  end
524
426
  end
525
427
 
526
- sub_test_case '#store_result' do
527
- test 'returns Mysql::Result' do
528
- @m.query_with_result = false
529
- @m.query 'select 1,2,3'
530
- ret = @m.store_result
531
- assert{ ret.kind_of? Mysql::Result }
532
- assert{ ret.fetch_row == ['1','2','3'] }
533
- end
534
- test 'raises error when no query' do
535
- assert_raise Mysql::ClientError, 'invalid usage' do
536
- @m.store_result
537
- end
538
- end
539
- test 'raises error when query does not return results' do
540
- @m.query 'set @hoge:=123'
541
- assert_raise Mysql::ClientError, 'invalid usage' do
542
- @m.store_result
543
- end
544
- end
545
- end
546
-
547
428
  sub_test_case '#thread_id' do
548
429
  test 'returns thread id as Integer' do
549
430
  assert{ @m.thread_id.kind_of? Integer }
550
431
  end
551
432
  end
552
433
 
553
- sub_test_case '#use_result' do
554
- test 'returns Mysql::Result' do
555
- @m.query_with_result = false
556
- @m.query 'select 1,2,3'
557
- ret = @m.use_result
558
- assert{ ret.kind_of? Mysql::Result }
559
- assert{ ret.fetch_row == ['1','2','3'] }
560
- end
561
- test 'raises error when no query' do
562
- assert_raise Mysql::ClientError, 'invalid usage' do
563
- @m.use_result
564
- end
565
- end
566
- test 'raises error when query does not return results' do
567
- @m.query 'set @hoge:=123'
568
- assert_raise Mysql::ClientError, 'invalid usage' do
569
- @m.use_result
570
- end
571
- end
572
- end
573
-
574
- sub_test_case '#get_server_version' do
575
- test 'returns server version as Integer' do
576
- assert{ @m.get_server_version.kind_of? Integer }
577
- end
578
- end
579
-
580
434
  sub_test_case '#server_version' do
581
435
  test 'returns server version as Integer' do
582
436
  assert{ @m.server_version.kind_of? Integer }
@@ -641,27 +495,6 @@ class TestMysql < Test::Unit::TestCase
641
495
  end
642
496
  end
643
497
 
644
- sub_test_case '#query_with_result' do
645
- test 'default value is true' do
646
- assert{ @m.query_with_result == true }
647
- end
648
- test 'can set value' do
649
- assert{ (@m.query_with_result=true) == true }
650
- assert{ @m.query_with_result == true }
651
- assert{ (@m.query_with_result=false) == false }
652
- assert{ @m.query_with_result == false }
653
- end
654
- end
655
-
656
- sub_test_case '#query_with_result is false' do
657
- test 'Mysql#query returns self and Mysql#store_result returns result set' do
658
- @m.query_with_result = false
659
- assert{ @m.query('select 1,2,3') == @m }
660
- res = @m.store_result
661
- assert{ res.fetch_row == ['1','2','3'] }
662
- end
663
- end
664
-
665
498
  sub_test_case '#query with block' do
666
499
  test 'returns self' do
667
500
  assert{ @m.query('select 1'){} == @m }
@@ -694,7 +527,7 @@ class TestMysql < Test::Unit::TestCase
694
527
 
695
528
  sub_test_case 'multiple statement query:' do
696
529
  setup do
697
- @m = Mysql.new(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
530
+ @m = Mysql.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
698
531
  @m.set_server_option(Mysql::OPTION_MULTI_STATEMENTS_ON)
699
532
  @res = @m.query 'select 1,2; select 3,4,5'
700
533
  end
@@ -730,9 +563,33 @@ class TestMysql < Test::Unit::TestCase
730
563
  end
731
564
  end
732
565
 
566
+ test 'multiple statement error' do
567
+ m = Mysql.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
568
+ m.set_server_option(Mysql::OPTION_MULTI_STATEMENTS_ON)
569
+ res = m.query 'select 1; select hoge; select 2'
570
+ assert{ res.entries == [['1']] }
571
+ assert{ m.more_results? == true }
572
+ assert_raise(Mysql::ServerError::BadFieldError){ m.next_result }
573
+ assert{ m.more_results? == false }
574
+ end
575
+
576
+ test 'procedure returns multiple results' do
577
+ m = Mysql.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
578
+ m.query 'drop procedure if exists test_proc'
579
+ m.query 'create procedure test_proc() begin select 1 as a; select 2 as b; end'
580
+ res = m.query 'call test_proc()'
581
+ assert{ res.entries == [['1']] }
582
+ assert{ m.more_results? == true }
583
+ assert{ m.next_result == true }
584
+ assert{ m.store_result.entries == [['2']] }
585
+ assert{ m.more_results? == true }
586
+ assert{ m.next_result == true }
587
+ assert{ m.more_results? == false }
588
+ end
589
+
733
590
  sub_test_case 'Mysql::Result' do
734
591
  setup do
735
- @m = Mysql.new(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
592
+ @m = Mysql.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
736
593
  @m.charset = 'latin1'
737
594
  @m.query 'create temporary table t (id int default 0, str char(10), primary key (id))'
738
595
  @m.query "insert into t values (1,'abc'),(2,'defg'),(3,'hi'),(4,null)"
@@ -888,7 +745,7 @@ class TestMysql < Test::Unit::TestCase
888
745
 
889
746
  sub_test_case 'Mysql::Field' do
890
747
  setup do
891
- @m = Mysql.new(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
748
+ @m = Mysql.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
892
749
  @m.charset = 'latin1'
893
750
  @m.query 'create temporary table t (id int default 0, str char(10), primary key (id))'
894
751
  @m.query "insert into t values (1,'abc'),(2,'defg'),(3,'hi'),(4,null)"
@@ -911,10 +768,6 @@ class TestMysql < Test::Unit::TestCase
911
768
  assert{ @res.fetch_field.def == nil }
912
769
  end
913
770
 
914
- test '#def for field information is default value' do
915
- assert{ @m.list_fields('t').fetch_field.def == '0' }
916
- end
917
-
918
771
  test '#type is type of field as Integer' do
919
772
  assert{ @res.fetch_field.type == Mysql::Field::TYPE_LONG }
920
773
  assert{ @res.fetch_field.type == Mysql::Field::TYPE_STRING }
@@ -939,8 +792,8 @@ class TestMysql < Test::Unit::TestCase
939
792
  assert{ @m.query('select 1.23').fetch_field.decimals == 2 }
940
793
  end
941
794
 
942
- test '#hash return field as hash' do
943
- assert{ @res.fetch_field.hash == {
795
+ test '#to_hash return field as hash' do
796
+ assert{ @res.fetch_field.to_hash == {
944
797
  'name' => 'id',
945
798
  'table' => 't',
946
799
  'def' => nil,
@@ -951,7 +804,7 @@ class TestMysql < Test::Unit::TestCase
951
804
  'decimals' => 0,
952
805
  }
953
806
  }
954
- assert{ @res.fetch_field.hash == {
807
+ assert{ @res.fetch_field.to_hash == {
955
808
  'name' => 'str',
956
809
  'table' => 't',
957
810
  'def' => nil,
@@ -987,15 +840,15 @@ class TestMysql < Test::Unit::TestCase
987
840
 
988
841
  sub_test_case 'create Mysql::Stmt object:' do
989
842
  setup do
990
- @m = Mysql.new(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
843
+ @m = Mysql.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
991
844
  end
992
845
 
993
846
  teardown do
994
847
  @m.close if @m
995
848
  end
996
849
 
997
- test 'Mysql#stmt_init returns Mysql::Stmt object' do
998
- assert{ @m.stmt_init.kind_of? Mysql::Stmt }
850
+ test 'Mysql#stmt returns Mysql::Stmt object' do
851
+ assert{ @m.stmt.kind_of? Mysql::Stmt }
999
852
  end
1000
853
 
1001
854
  test 'Mysq;#prepare returns Mysql::Stmt object' do
@@ -1005,14 +858,14 @@ class TestMysql < Test::Unit::TestCase
1005
858
 
1006
859
  sub_test_case 'Mysql::Stmt' do
1007
860
  setup do
1008
- @m = Mysql.new(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
861
+ @m = Mysql.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
1009
862
  @m.query("set sql_mode=''")
1010
- @s = @m.stmt_init
863
+ @s = @m.stmt
1011
864
  end
1012
865
 
1013
866
  teardown do
1014
867
  @s.close if @s rescue nil
1015
- @m.close if @m
868
+ @m.close if @m rescue nil
1016
869
  end
1017
870
 
1018
871
  test '#affected_rows returns number of affected records' do
@@ -1027,62 +880,6 @@ class TestMysql < Test::Unit::TestCase
1027
880
  assert{ @s.affected_rows == 3 }
1028
881
  end
1029
882
 
1030
- sub_test_case '#bind_result' do
1031
- setup do
1032
- @m.query 'create temporary table t (i int, c char(10), d double, t datetime)'
1033
- @m.query 'insert into t values (123,"9abcdefg",1.2345,20091208100446)'
1034
- @s.prepare 'select * from t'
1035
- end
1036
-
1037
- test '(nil) make result format to be standard value' do
1038
- @s.bind_result nil, nil, nil, nil
1039
- @s.execute
1040
- assert{ @s.fetch == [123, '9abcdefg', 1.2345, Mysql::Time.new(2009,12,8,10,4,46)] }
1041
- end
1042
-
1043
- test '(Numeric) make result format to be Integer value' do
1044
- @s.bind_result Numeric, Numeric, Numeric, Numeric
1045
- @s.execute
1046
- assert{ @s.fetch == [123, 9, 1, 20091208100446] }
1047
- end
1048
-
1049
- test '(Integer) make result format to be Integer value' do
1050
- @s.bind_result Integer, Integer, Integer, Integer
1051
- @s.execute
1052
- assert{ @s.fetch == [123, 9, 1, 20091208100446] }
1053
- end
1054
-
1055
- test '(String) make result format to be String value' do
1056
- @s.bind_result String, String, String, String
1057
- @s.execute
1058
- assert{ @s.fetch == ["123", "9abcdefg", "1.2345", "2009-12-08 10:04:46"] }
1059
- end
1060
-
1061
- test '(Float) make result format to be Float value' do
1062
- @s.bind_result Float, Float, Float, Float
1063
- @s.execute
1064
- assert{ @s.fetch == [123.0, 9.0, 1.2345 , 20091208100446.0] }
1065
- end
1066
-
1067
- test '(Mysql::Time) make result format to be Mysql::Time value' do
1068
- @s.bind_result Mysql::Time, Mysql::Time, Mysql::Time, Mysql::Time
1069
- @s.execute
1070
- assert{ @s.fetch == [Mysql::Time.new(2000,1,23), Mysql::Time.new, Mysql::Time.new, Mysql::Time.new(2009,12,8,10,4,46)] }
1071
- end
1072
-
1073
- test '(invalid) raises error' do
1074
- assert_raise TypeError do
1075
- @s.bind_result(Time, nil, nil, nil)
1076
- end
1077
- end
1078
-
1079
- test 'with mismatch argument count raise error' do
1080
- assert_raise Mysql::ClientError, 'bind_result: result value count(4) != number of argument(1)' do
1081
- @s.bind_result(nil)
1082
- end
1083
- end
1084
- end
1085
-
1086
883
  test '#close returns nil' do
1087
884
  assert{ @s.close == nil }
1088
885
  end
@@ -1107,8 +904,8 @@ class TestMysql < Test::Unit::TestCase
1107
904
  @s.prepare 'select * from t'
1108
905
  @s.execute
1109
906
  expect = [
1110
- [1, 'abc', Mysql::Time.new(1970,12,24,23,59,05)],
1111
- [2, 'def', Mysql::Time.new(2112,9,3,12,34,56)],
907
+ [1, 'abc', Time.new(1970,12,24,23,59,05)],
908
+ [2, 'def', Time.new(2112,9,3,12,34,56)],
1112
909
  [3, '123', nil],
1113
910
  ]
1114
911
  @s.each do |a|
@@ -1254,20 +1051,16 @@ class TestMysql < Test::Unit::TestCase
1254
1051
  @m.query 'insert into t values (0),(-1),(127),(-128),(255),(-255),(256)'
1255
1052
  @s.prepare 'select i from t'
1256
1053
  @s.execute
1257
- if defined? Encoding
1258
- assert{ @s.entries == [
1259
- ["\x00".force_encoding('ASCII-8BIT')],
1260
- ["\xff".force_encoding('ASCII-8BIT')],
1261
- ["\x7f".force_encoding('ASCII-8BIT')],
1262
- ["\xff".force_encoding('ASCII-8BIT')],
1263
- ["\xff".force_encoding('ASCII-8BIT')],
1264
- ["\xff".force_encoding('ASCII-8BIT')],
1265
- ["\xff".force_encoding('ASCII-8BIT')],
1266
- ]
1267
- }
1268
- else
1269
- assert{ @s.entries == [["\x00"], ["\xff"], ["\x7f"], ["\xff"], ["\xff"], ["\xff"], ["\xff"]] }
1270
- end
1054
+ assert{ @s.entries == [
1055
+ ["\x00".force_encoding('ASCII-8BIT')],
1056
+ ["\xff".force_encoding('ASCII-8BIT')],
1057
+ ["\x7f".force_encoding('ASCII-8BIT')],
1058
+ ["\xff".force_encoding('ASCII-8BIT')],
1059
+ ["\xff".force_encoding('ASCII-8BIT')],
1060
+ ["\xff".force_encoding('ASCII-8BIT')],
1061
+ ["\xff".force_encoding('ASCII-8BIT')],
1062
+ ]
1063
+ }
1271
1064
  end
1272
1065
 
1273
1066
  test '#fetch bit column (64bit)' do
@@ -1275,25 +1068,14 @@ class TestMysql < Test::Unit::TestCase
1275
1068
  @m.query 'insert into t values (0),(-1),(4294967296),(18446744073709551615),(18446744073709551616)'
1276
1069
  @s.prepare 'select i from t'
1277
1070
  @s.execute
1278
- if defined? Encoding
1279
- assert{ @s.entries == [
1280
- ["\x00\x00\x00\x00\x00\x00\x00\x00".force_encoding('ASCII-8BIT')],
1281
- ["\xff\xff\xff\xff\xff\xff\xff\xff".force_encoding('ASCII-8BIT')],
1282
- ["\x00\x00\x00\x01\x00\x00\x00\x00".force_encoding('ASCII-8BIT')],
1283
- ["\xff\xff\xff\xff\xff\xff\xff\xff".force_encoding('ASCII-8BIT')],
1284
- ["\xff\xff\xff\xff\xff\xff\xff\xff".force_encoding('ASCII-8BIT')],
1285
- ]
1286
- }
1287
- else
1288
- assert{ @s.entries == [
1289
- ["\x00\x00\x00\x00\x00\x00\x00\x00"],
1290
- ["\xff\xff\xff\xff\xff\xff\xff\xff"],
1291
- ["\x00\x00\x00\x01\x00\x00\x00\x00"],
1292
- ["\xff\xff\xff\xff\xff\xff\xff\xff"],
1293
- ["\xff\xff\xff\xff\xff\xff\xff\xff"],
1294
- ]
1295
- }
1296
- end
1071
+ assert{ @s.entries == [
1072
+ ["\x00\x00\x00\x00\x00\x00\x00\x00".force_encoding('ASCII-8BIT')],
1073
+ ["\xff\xff\xff\xff\xff\xff\xff\xff".force_encoding('ASCII-8BIT')],
1074
+ ["\x00\x00\x00\x01\x00\x00\x00\x00".force_encoding('ASCII-8BIT')],
1075
+ ["\xff\xff\xff\xff\xff\xff\xff\xff".force_encoding('ASCII-8BIT')],
1076
+ ["\xff\xff\xff\xff\xff\xff\xff\xff".force_encoding('ASCII-8BIT')],
1077
+ ]
1078
+ }
1297
1079
  end
1298
1080
 
1299
1081
  test '#fetch tinyint column' do
@@ -1446,14 +1228,11 @@ class TestMysql < Test::Unit::TestCase
1446
1228
  @s.prepare 'select i from t'
1447
1229
  @s.execute
1448
1230
  cols = @s.fetch
1449
- assert{ cols == [Mysql::Time.new] }
1450
- assert{ cols.first.to_s == '0000-00-00' }
1231
+ assert{ cols == [nil] }
1451
1232
  cols = @s.fetch
1452
- assert{ cols == [Mysql::Time.new(1000,1,1)] }
1453
- assert{ cols.first.to_s == '1000-01-01' }
1233
+ assert{ cols == [Time.new(1000,1,1)] }
1454
1234
  cols = @s.fetch
1455
- assert{ cols == [Mysql::Time.new(9999,12,31)] }
1456
- assert{ cols.first.to_s == '9999-12-31' }
1235
+ assert{ cols == [Time.new(9999,12,31)] }
1457
1236
  end
1458
1237
 
1459
1238
  test '#fetch datetime column' do
@@ -1461,9 +1240,9 @@ class TestMysql < Test::Unit::TestCase
1461
1240
  @m.query "insert into t values ('0000-00-00 00:00:00'),('1000-01-01 00:00:00'),('9999-12-31 23:59:59')"
1462
1241
  @s.prepare 'select i from t'
1463
1242
  @s.execute
1464
- assert{ @s.fetch == [Mysql::Time.new] }
1465
- assert{ @s.fetch == [Mysql::Time.new(1000,1,1)] }
1466
- assert{ @s.fetch == [Mysql::Time.new(9999,12,31,23,59,59)] }
1243
+ assert{ @s.fetch == [nil] }
1244
+ assert{ @s.fetch == [Time.new(1000,1,1)] }
1245
+ assert{ @s.fetch == [Time.new(9999,12,31,23,59,59)] }
1467
1246
  end
1468
1247
 
1469
1248
  test '#fetch timestamp column' do
@@ -1471,8 +1250,8 @@ class TestMysql < Test::Unit::TestCase
1471
1250
  @m.query("insert into t values ('1970-01-02 00:00:00'),('2037-12-30 23:59:59')")
1472
1251
  @s.prepare 'select i from t'
1473
1252
  @s.execute
1474
- assert{ @s.fetch == [Mysql::Time.new(1970,1,2)] }
1475
- assert{ @s.fetch == [Mysql::Time.new(2037,12,30,23,59,59)] }
1253
+ assert{ @s.fetch == [Time.new(1970,1,2)] }
1254
+ assert{ @s.fetch == [Time.new(2037,12,30,23,59,59)] }
1476
1255
  end
1477
1256
 
1478
1257
  test '#fetch time column' do
@@ -1480,9 +1259,9 @@ class TestMysql < Test::Unit::TestCase
1480
1259
  @m.query "insert into t values ('-838:59:59'),(0),('838:59:59')"
1481
1260
  @s.prepare 'select i from t'
1482
1261
  @s.execute
1483
- assert{ @s.fetch == [Mysql::Time.new(0,0,0,838,59,59,true)] }
1484
- assert{ @s.fetch == [Mysql::Time.new(0,0,0,0,0,0,false)] }
1485
- assert{ @s.fetch == [Mysql::Time.new(0,0,0,838,59,59,false)] }
1262
+ assert{ @s.fetch == [-(838*3600+59*60+59)] }
1263
+ assert{ @s.fetch == [0] }
1264
+ assert{ @s.fetch == [838*3600+59*60+59] }
1486
1265
  end
1487
1266
 
1488
1267
  test '#fetch year column' do
@@ -1707,79 +1486,6 @@ class TestMysql < Test::Unit::TestCase
1707
1486
  end
1708
1487
  end
1709
1488
 
1710
- sub_test_case 'Mysql::Time' do
1711
- setup do
1712
- @t = Mysql::Time.new
1713
- end
1714
-
1715
- test '.new with no arguments returns 0' do
1716
- assert{ @t.year == 0 }
1717
- assert{ @t.month == 0 }
1718
- assert{ @t.day == 0 }
1719
- assert{ @t.hour == 0 }
1720
- assert{ @t.minute == 0 }
1721
- assert{ @t.second == 0 }
1722
- assert{ @t.neg == false }
1723
- assert{ @t.second_part == 0 }
1724
- end
1725
-
1726
- test '#inspect' do
1727
- assert{ Mysql::Time.new(2009,12,8,23,35,21).inspect == '#<Mysql::Time:2009-12-08 23:35:21>' }
1728
- end
1729
-
1730
- test '#to_s' do
1731
- assert{ Mysql::Time.new(2009,12,8,23,35,21).to_s == '2009-12-08 23:35:21' }
1732
- end
1733
-
1734
- test '#to_i' do
1735
- assert{ Mysql::Time.new(2009,12,8,23,35,21).to_i == 20091208233521 }
1736
- end
1737
-
1738
- test '#year' do
1739
- assert{ (@t.year = 2009) == 2009 }
1740
- assert{ @t.year == 2009 }
1741
- end
1742
-
1743
- test '#month' do
1744
- assert{ (@t.month = 12) == 12 }
1745
- assert{ @t.month == 12 }
1746
- end
1747
-
1748
- test '#day' do
1749
- assert{ (@t.day = 8) == 8 }
1750
- assert{ @t.day == 8 }
1751
- end
1752
-
1753
- test '#hour' do
1754
- assert{ (@t.hour = 23) == 23 }
1755
- assert{ @t.hour == 23 }
1756
- end
1757
-
1758
- test '#minute' do
1759
- assert{ (@t.minute = 35) == 35 }
1760
- assert{ @t.minute == 35 }
1761
- end
1762
-
1763
- test '#second' do
1764
- assert{ (@t.second = 21) == 21 }
1765
- assert{ @t.second == 21 }
1766
- end
1767
-
1768
- test '#neg' do
1769
- assert{ @t.neg == false }
1770
- end
1771
-
1772
- test '#second_part' do
1773
- assert{ @t.second_part == 0 }
1774
- end
1775
-
1776
- test '#==' do
1777
- t1 = Mysql::Time.new 2009,12,8,23,35,21
1778
- t2 = Mysql::Time.new 2009,12,8,23,35,21
1779
- assert{ t1 == t2 }
1780
- end
1781
- end
1782
-
1783
1489
  sub_test_case 'Mysql::Error' do
1784
1490
  setup do
1785
1491
  m = Mysql.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
@@ -1802,96 +1508,94 @@ class TestMysql < Test::Unit::TestCase
1802
1508
  end
1803
1509
  end
1804
1510
 
1805
- if defined? Encoding
1806
- sub_test_case 'Connection charset is UTF-8:' do
1807
- setup do
1808
- @m = Mysql.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
1809
- @m.charset = "utf8"
1810
- @m.query "create temporary table t (utf8 char(10) charset utf8, cp932 char(10) charset cp932, eucjp char(10) charset eucjpms, bin varbinary(10))"
1811
- @utf8 = "いろは"
1812
- @cp932 = @utf8.encode "CP932"
1813
- @eucjp = @utf8.encode "EUC-JP-MS"
1814
- @bin = "\x00\x01\x7F\x80\xFE\xFF".force_encoding("ASCII-8BIT")
1815
- @default_internal = Encoding.default_internal
1816
- end
1511
+ sub_test_case 'Connection charset is UTF-8:' do
1512
+ setup do
1513
+ @m = Mysql.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
1514
+ @m.charset = "utf8"
1515
+ @m.query "create temporary table t (utf8 char(10) charset utf8, cp932 char(10) charset cp932, eucjp char(10) charset eucjpms, bin varbinary(10))"
1516
+ @utf8 = "いろは"
1517
+ @cp932 = @utf8.encode "CP932"
1518
+ @eucjp = @utf8.encode "EUC-JP-MS"
1519
+ @bin = "\x00\x01\x7F\x80\xFE\xFF".force_encoding("ASCII-8BIT")
1520
+ @default_internal = Encoding.default_internal
1521
+ end
1817
1522
 
1818
- teardown do
1523
+ teardown do
1524
+ v = $VERBOSE
1525
+ $VERBOSE = false
1526
+ Encoding.default_internal = @default_internal
1527
+ $VERBOSE = v
1528
+ end
1529
+
1530
+ sub_test_case 'default_internal is CP932' do
1531
+ setup do
1532
+ @m.prepare("insert into t (utf8,cp932,eucjp,bin) values (?,?,?,?)").execute @utf8, @cp932, @eucjp, @bin
1819
1533
  v = $VERBOSE
1820
1534
  $VERBOSE = false
1821
- Encoding.default_internal = @default_internal
1535
+ Encoding.default_internal = 'CP932'
1822
1536
  $VERBOSE = v
1823
1537
  end
1824
-
1825
- sub_test_case 'default_internal is CP932' do
1826
- setup do
1827
- @m.prepare("insert into t (utf8,cp932,eucjp,bin) values (?,?,?,?)").execute @utf8, @cp932, @eucjp, @bin
1828
- v = $VERBOSE
1829
- $VERBOSE = false
1830
- Encoding.default_internal = 'CP932'
1831
- $VERBOSE = v
1832
- end
1833
- test 'is converted to CP932' do
1834
- assert @m.query('select "あいう"').fetch == ["\x82\xA0\x82\xA2\x82\xA4".force_encoding("CP932")]
1835
- end
1836
- test 'data is stored as is' do
1837
- assert @m.query('select hex(utf8),hex(cp932),hex(eucjp),hex(bin) from t').fetch == ['E38184E3828DE381AF', '82A282EB82CD', 'A4A4A4EDA4CF', '00017F80FEFF']
1838
- end
1839
- test 'By simple query, charset of retrieved data is connection charset' do
1840
- assert @m.query('select utf8,cp932,eucjp,bin from t').fetch == [@cp932, @cp932, @cp932, @bin]
1841
- end
1842
- test 'By prepared statement, charset of retrieved data is connection charset except for binary' do
1843
- assert @m.prepare('select utf8,cp932,eucjp,bin from t').execute.fetch == [@cp932, @cp932, @cp932, @bin]
1844
- end
1538
+ test 'is converted to CP932' do
1539
+ assert @m.query('select "あいう"').fetch == ["\x82\xA0\x82\xA2\x82\xA4".force_encoding("CP932")]
1540
+ end
1541
+ test 'data is stored as is' do
1542
+ assert @m.query('select hex(utf8),hex(cp932),hex(eucjp),hex(bin) from t').fetch == ['E38184E3828DE381AF', '82A282EB82CD', 'A4A4A4EDA4CF', '00017F80FEFF']
1543
+ end
1544
+ test 'By simple query, charset of retrieved data is connection charset' do
1545
+ assert @m.query('select utf8,cp932,eucjp,bin from t').fetch == [@cp932, @cp932, @cp932, @bin]
1845
1546
  end
1547
+ test 'By prepared statement, charset of retrieved data is connection charset except for binary' do
1548
+ assert @m.prepare('select utf8,cp932,eucjp,bin from t').execute.fetch == [@cp932, @cp932, @cp932, @bin]
1549
+ end
1550
+ end
1846
1551
 
1847
- sub_test_case 'query with CP932 encoding' do
1848
- test 'is converted to UTF-8' do
1849
- assert @m.query('select HEX("あいう")'.encode("CP932")).fetch == ["E38182E38184E38186"]
1850
- end
1552
+ sub_test_case 'query with CP932 encoding' do
1553
+ test 'is converted to UTF-8' do
1554
+ assert @m.query('select HEX("あいう")'.encode("CP932")).fetch == ["E38182E38184E38186"]
1851
1555
  end
1556
+ end
1852
1557
 
1853
- sub_test_case 'prepared statement with CP932 encoding' do
1854
- test 'is converted to UTF-8' do
1855
- assert @m.prepare('select HEX("あいう")'.encode("CP932")).execute.fetch == ["E38182E38184E38186"]
1856
- end
1558
+ sub_test_case 'prepared statement with CP932 encoding' do
1559
+ test 'is converted to UTF-8' do
1560
+ assert @m.prepare('select HEX("あいう")'.encode("CP932")).execute.fetch == ["E38182E38184E38186"]
1857
1561
  end
1562
+ end
1858
1563
 
1859
- sub_test_case 'The encoding of data are correspond to charset of column:' do
1860
- setup do
1861
- @m.prepare("insert into t (utf8,cp932,eucjp,bin) values (?,?,?,?)").execute @utf8, @cp932, @eucjp, @bin
1862
- end
1863
- test 'data is stored as is' do
1864
- assert{ @m.query('select hex(utf8),hex(cp932),hex(eucjp),hex(bin) from t').fetch == ['E38184E3828DE381AF', '82A282EB82CD', 'A4A4A4EDA4CF', '00017F80FEFF'] }
1865
- end
1866
- test 'By simple query, charset of retrieved data is connection charset' do
1867
- assert{ @m.query('select utf8,cp932,eucjp,bin from t').fetch == [@utf8, @utf8, @utf8, @bin] }
1868
- end
1869
- test 'By prepared statement, charset of retrieved data is connection charset except for binary' do
1870
- assert{ @m.prepare('select utf8,cp932,eucjp,bin from t').execute.fetch == [@utf8, @utf8, @utf8, @bin] }
1871
- end
1564
+ sub_test_case 'The encoding of data are correspond to charset of column:' do
1565
+ setup do
1566
+ @m.prepare("insert into t (utf8,cp932,eucjp,bin) values (?,?,?,?)").execute @utf8, @cp932, @eucjp, @bin
1567
+ end
1568
+ test 'data is stored as is' do
1569
+ assert{ @m.query('select hex(utf8),hex(cp932),hex(eucjp),hex(bin) from t').fetch == ['E38184E3828DE381AF', '82A282EB82CD', 'A4A4A4EDA4CF', '00017F80FEFF'] }
1872
1570
  end
1571
+ test 'By simple query, charset of retrieved data is connection charset' do
1572
+ assert{ @m.query('select utf8,cp932,eucjp,bin from t').fetch == [@utf8, @utf8, @utf8, @bin] }
1573
+ end
1574
+ test 'By prepared statement, charset of retrieved data is connection charset except for binary' do
1575
+ assert{ @m.prepare('select utf8,cp932,eucjp,bin from t').execute.fetch == [@utf8, @utf8, @utf8, @bin] }
1576
+ end
1577
+ end
1873
1578
 
1874
- sub_test_case 'The encoding of data are different from charset of column:' do
1875
- setup do
1876
- @m.prepare("insert into t (utf8,cp932,eucjp,bin) values (?,?,?,?)").execute @utf8, @utf8, @utf8, @utf8
1877
- end
1878
- test 'stored data is converted' do
1879
- assert{ @m.query("select hex(utf8),hex(cp932),hex(eucjp),hex(bin) from t").fetch == ["E38184E3828DE381AF", "82A282EB82CD", "A4A4A4EDA4CF", "E38184E3828DE381AF"] }
1880
- end
1881
- test 'By simple query, charset of retrieved data is connection charset' do
1882
- assert{ @m.query("select utf8,cp932,eucjp,bin from t").fetch == [@utf8, @utf8, @utf8, @utf8.dup.force_encoding('ASCII-8BIT')] }
1883
- end
1884
- test 'By prepared statement, charset of retrieved data is connection charset except for binary' do
1885
- assert{ @m.prepare("select utf8,cp932,eucjp,bin from t").execute.fetch == [@utf8, @utf8, @utf8, @utf8.dup.force_encoding("ASCII-8BIT")] }
1886
- end
1579
+ sub_test_case 'The encoding of data are different from charset of column:' do
1580
+ setup do
1581
+ @m.prepare("insert into t (utf8,cp932,eucjp,bin) values (?,?,?,?)").execute @utf8, @utf8, @utf8, @utf8
1887
1582
  end
1583
+ test 'stored data is converted' do
1584
+ assert{ @m.query("select hex(utf8),hex(cp932),hex(eucjp),hex(bin) from t").fetch == ["E38184E3828DE381AF", "82A282EB82CD", "A4A4A4EDA4CF", "E38184E3828DE381AF"] }
1585
+ end
1586
+ test 'By simple query, charset of retrieved data is connection charset' do
1587
+ assert{ @m.query("select utf8,cp932,eucjp,bin from t").fetch == [@utf8, @utf8, @utf8, @utf8.dup.force_encoding('ASCII-8BIT')] }
1588
+ end
1589
+ test 'By prepared statement, charset of retrieved data is connection charset except for binary' do
1590
+ assert{ @m.prepare("select utf8,cp932,eucjp,bin from t").execute.fetch == [@utf8, @utf8, @utf8, @utf8.dup.force_encoding("ASCII-8BIT")] }
1591
+ end
1592
+ end
1888
1593
 
1889
- sub_test_case 'The data include invalid byte code:' do
1890
- test 'raises Encoding::InvalidByteSequenceError' do
1891
- cp932 = "\x01\xFF\x80".force_encoding("CP932")
1892
- assert_raise Encoding::InvalidByteSequenceError do
1893
- @m.prepare("insert into t (cp932) values (?)").execute cp932
1894
- end
1594
+ sub_test_case 'The data include invalid byte code:' do
1595
+ test 'raises Encoding::InvalidByteSequenceError' do
1596
+ cp932 = "\x01\xFF\x80".force_encoding("CP932")
1597
+ assert_raise Encoding::InvalidByteSequenceError do
1598
+ @m.prepare("insert into t (cp932) values (?)").execute cp932
1895
1599
  end
1896
1600
  end
1897
1601
  end