mysql 2.5.1 → 2.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
- <!-- $Id: README.html,v 1.3 2004/09/20 12:22:42 tommy Exp $ -->
2
+ <!-- $Id: README.html,v 1.9 2005/04/25 14:34:19 tommy Exp $ -->
3
3
  <html>
4
4
  <head>
5
5
  <meta http-equiv="content-style-type" content="text/css">
@@ -17,10 +17,20 @@
17
17
  It provides the same functions for Ruby programs that the MySQL C API provides for C programs.
18
18
  </p>
19
19
 
20
+ <!--
21
+ <h2>Download</h2>
22
+ <ul>
23
+ <li><a href="mysql-ruby-2.6.tar.gz">mysql-ruby-2.6.tar.gz</a>
24
+ <li><a href="mysql-ruby-2.5.2.tar.gz">mysql-ruby-2.5.2.tar.gz</a>
25
+ <li><a href="mysql-ruby-2.5.1.tar.gz">mysql-ruby-2.5.1.tar.gz</a>
26
+ <li><a href="mysql-ruby-2.5.tar.gz">mysql-ruby-2.5.tar.gz</a>
27
+ </ul>
28
+ -->
29
+
20
30
  <h2>Requirement</h2>
21
31
  <ul>
22
- <li>MySQL 3.23.58 +
23
- <li>Ruby 1.6.8 +
32
+ <li>MySQL 4.1.9 +
33
+ <li>Ruby 1.8.2 +
24
34
  </ul>
25
35
  <p>
26
36
  The module may work for other versions, but that has not been verified.
@@ -81,17 +91,9 @@
81
91
  2nd:
82
92
  </p>
83
93
  <pre class="code">
84
- % ruby -I. ./test.rb <i>hostname</i> <i>user</i> <i>passwd</i>
94
+ % ruby ./test.rb [<i>hostname</i> [<i>user</i> [<i>passwd</i> [<i>dbname</i> [<i>port</i> [<i>socket</i> [<i>flag</i>]]]]]]]
85
95
  </pre>
86
96
 
87
- <p>
88
- test.rb should be invoked with three arguments that indicate the
89
- MySQL server hostname, and the username and password for a MySQL
90
- account that can create a database named "rubytest". An
91
- optional fourth argument is allowed, to specify a database name
92
- to use rather than "rubytest". The database should not already
93
- exist.
94
- </p>
95
97
  <p>
96
98
  3rd:
97
99
  </p>
@@ -352,6 +354,19 @@
352
354
  return table list Array.
353
355
  </p>
354
356
 
357
+ <dt>more_results?()
358
+ <dd>
359
+ <p>
360
+ returns true if more results exist from the currently executed query.
361
+ </p>
362
+
363
+ <dt>next_result()
364
+ <dd>
365
+ <p>
366
+ returns true if more results exist from the currently executed query.
367
+ after this, you do store_result() to get result table of query.
368
+ </p>
369
+
355
370
  <dt>ping()
356
371
  <dd>
357
372
  <p>
@@ -359,12 +374,22 @@
359
374
  </p>
360
375
 
361
376
  <dt>query(q)
377
+ <dt>real_query(q)
362
378
  <dd>
363
379
  <p>
364
380
  do query and store_result(). return Mysql::Result object.
365
381
  If query_with_result is false, it does not store_result().
366
382
  </p>
367
383
 
384
+ <dt>query(q) {|res| ...}
385
+ <dt>real_query(q) {|res| ...}
386
+ <dd>
387
+ <p>
388
+ do query and execute block with Mysql::Result object.
389
+ if you specify multiple query, then repeat block.
390
+ set_server_option(Mysql::OPTION_MULTI_STATEMENTS) is executed automatically.
391
+ </p>
392
+
368
393
  <dt>refresh(r)
369
394
  <dd>
370
395
  <p>
@@ -389,6 +414,13 @@
389
414
  select database.
390
415
  </p>
391
416
 
417
+ <dt>set_server_option(opt)
418
+ <dd>
419
+ <p>
420
+ set option to server.
421
+ options is one of Mysql::OPTION_MULTI_STATEMENTS_ON, Mysql::OPTION_MULTI_STATEMENTS_OFF.
422
+ </p>
423
+
392
424
  <dt>shutdown()
393
425
  <dd>
394
426
  <p>
@@ -437,9 +469,18 @@
437
469
  <dl>
438
470
  <dt>query_with_result
439
471
  <dd>
440
- If it is true then do store_result() on query() If true,
441
- query() also invokes store_result() and returns a
442
- Mysql::Result object. Default is true.
472
+ <p>
473
+ If true, query() also invokes store_result() and returns a
474
+ Mysql::Result object. Default is true.
475
+ </p>
476
+
477
+ <dt>reconnect
478
+ <dd>
479
+ <p>
480
+ If true, reconnect to server automatically when disconect to server.
481
+ Default is false.
482
+ </p>
483
+
443
484
  </dl>
444
485
 
445
486
  <h2>Mysql::Result class</h2>
@@ -607,8 +648,36 @@
607
648
  <dd>error number
608
649
  </dl>
609
650
 
610
- <h2>Histroy</h2>
651
+ <h2>History</h2>
611
652
  <dl>
653
+ <dt>2005-04-25
654
+ <dd>
655
+ version 2.6
656
+ <ul>
657
+ <li>add constants for Mysql#option():
658
+ Mysql::OPT_PROTOCOL, Mysql::OPT_READ_TIMEOUT,
659
+ Mysql::OPT_WRITE_TIMEOUT, Mysql::SET_CHARSET_DIR,
660
+ Mysql::SET_CHARSET_NAME, Mysql::SHARED_MEMORY_BASE_NAME,
661
+ Mysql::SECURE_AUTH
662
+ <li>add methods: Mysql#more_results?(), Mysql#next_result(),
663
+ Mysql#set_server_option(), Mysql#sqlstate()
664
+ <li>add constants for Mysql#connect():
665
+ Mysql::CLIENT_MULTI_STATEMENTS, Mysql::CLIENT_MULTI_RESULTS
666
+ <li>add constants for Mysql#set_server_option():
667
+ Mysql::OPTION_MULTI_STATEMENTS_ON,
668
+ Mysql::OPTION_MULTI_STATEMENTS_OFF
669
+ <li>add Mysql#query() with block
670
+ <li>add Mysql#reconnect(), Mysql#reconnect=()
671
+ <li>When connection was closed, it don't try to reconnect by default.
672
+ </ul>
673
+
674
+ <dt>2005-02-12
675
+ <dd>
676
+ version 2.5.2
677
+ <ul>
678
+ <li>BUG: Mysql#connect make object to not close. (Thanks Andres Salomon)
679
+ </ul>
680
+
612
681
  <dt>2004-09-20
613
682
  <dd>
614
683
  version 2.5.1
@@ -719,7 +788,7 @@
719
788
  <address><a href="mailto:tommy@tmtm.org">TOMITA Masahiro</a></address>
720
789
  <!-- Created: Sun Aug 29 11:52:09 JST 2004 -->
721
790
  <!-- hhmts start -->
722
- Last modified: Mon Sep 20 21:20:17 JST 2004
791
+ Last modified: Mon Apr 25 23:33:21 JST 2005
723
792
  <!-- hhmts end -->
724
793
  </body>
725
794
  </html>
@@ -1,5 +1,5 @@
1
1
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
- <!-- $Id: README_ja.html,v 1.3 2004/09/20 12:22:42 tommy Exp $ -->
2
+ <!-- $Id: README_ja.html,v 1.13 2005/04/25 14:34:19 tommy Exp $ -->
3
3
  <html>
4
4
  <head>
5
5
  <meta http-equiv="content-style-type" content="text/css">
@@ -10,16 +10,26 @@
10
10
 
11
11
  <body>
12
12
  <h1>MySQL/Ruby</h1>
13
- <p><a href="README_en.html">[English]</a></p>
13
+ <p><a href="README.html">[English]</a></p>
14
14
  <hr>
15
15
  <p>
16
16
  ����� <a href="http://www.mysql.com">MySQL</a> �� Ruby API �Ǥ���MySQL �� C API �Ȥۤ�Ʊ���ε�ǽ������ޤ���
17
17
  </p>
18
18
 
19
+ <!--
20
+ <h2>�����������</h2>
21
+ <ul>
22
+ <li><a href="mysql-ruby-2.6.tar.gz">mysql-ruby-2.6.tar.gz</a>
23
+ <li><a href="mysql-ruby-2.5.2.tar.gz">mysql-ruby-2.5.2.tar.gz</a>
24
+ <li><a href="mysql-ruby-2.5.1.tar.gz">mysql-ruby-2.5.1.tar.gz</a>
25
+ <li><a href="mysql-ruby-2.5.tar.gz">mysql-ruby-2.5.tar.gz</a>
26
+ </ul>
27
+ -->
28
+
19
29
  <h2>ɬ�פʤ��</h2>
20
30
  <ul>
21
- <li>MySQL 3.23.58�ʾ�
22
- <li>Ruby 1.6.8 �ʾ�
31
+ <li>MySQL 4.1.9 �ʾ�
32
+ <li>Ruby 1.8.2 �ʾ�
23
33
  </ul>
24
34
  <p>
25
35
  �����ʳ��Ǥ� make �Ǥ��뤫�⤷��ޤ��󤬡���ǧ���Ƥޤ���
@@ -77,11 +87,11 @@
77
87
  ���Ǵ�ñ�ʥƥ��Ȥ��Ǥ��ޤ���
78
88
  </p>
79
89
  <pre class="code">
80
- % ruby -I. ./test.rb <i>hostname</i> <i>user</i> <i>passwd</i>
90
+ % ruby ./test.rb [<i>hostname</i> [<i>user</i> [<i>passwd</i> [<i>dbname</i> [<i>port</i> [<i>socket</i> [<i>flag</i>]]]]]]]
81
91
  </pre>
82
92
 
83
93
  <p>
84
- test.rb ��Ϳ���� <i>hostname</i>, <i>user</i>, <i>passwd</i> �� MySQL �����Фȡ����Υ����о�ǥǡ����١�����������뤳�Ȥ��Ǥ���桼�����ѥ���ɤ���ꤷ�Ƥ���������
94
+ test.rb ��Ϳ��������� Mysql.real_connect() �ΰ�����Ʊ���Ǥ���
85
95
  </p>
86
96
  <p>
87
97
  ����ʤ���С������ѡ��桼���ǥ��󥹥ȡ��뤷�Ƥ���������
@@ -346,6 +356,19 @@
346
356
  �ơ��֥�ΰ�����������֤��ޤ���
347
357
  </p>
348
358
 
359
+ <dt>more_results?()
360
+ <dd>
361
+ <p>
362
+ �������Ƥ��ʤ��������̤�������Ͽ����֤��ޤ���
363
+ </p>
364
+
365
+ <dt>next_result()
366
+ <dd>
367
+ <p>
368
+ �������Ƥ��ʤ��������̤�������Ͽ����֤��ޤ���
369
+ ���θ�� store_result() ��¹Ԥ���ȥ������̤�����Ǥ��ޤ���
370
+ </p>
371
+
349
372
  <dt>ping()
350
373
  <dd>
351
374
  <p>
@@ -353,13 +376,24 @@
353
376
  </p>
354
377
 
355
378
  <dt>query(q)
379
+ <dt>real_query(q)
356
380
  <dd>
357
381
  <p>
358
- �������¹Ԥ��ޤ���Ruby �Ǥ�ʸ�����Ĺ����Ƚ�ǤǤ���Τǡ�real_query() �Ϥ���ޤ���
382
+ �������¹Ԥ��ޤ���
359
383
  �����꤬��̤��֤���硢��ưŪ�� store_result() ��¹Ԥ��ơ�Mysql::Result ���饹���֥������Ȥ��֤��ޤ���
360
384
  query_with_result �� false �����ꤵ��Ƥ���С�store_result() �ϼ¹Ԥ��ޤ���
361
385
  </p>
362
386
 
387
+ <dt>query(q) {|res| ...}
388
+ <dt>real_query(q) {|res| ...}
389
+ <dd>
390
+ <p>
391
+ �������¹Ԥ��ޤ���
392
+ �����꤬��̤��֤���硢Mysql::Result ���֥������Ȥ�����Ȥ��ƥ֥��å���¹Ԥ��ޤ���
393
+ �����ˡ�;�פǶ��ڤ�줿ʣ���Υ��������ꤷ�����ϡ�������ο������֥��å��򷫤��֤��ޤ���
394
+ ��ưŪ�� set_server_option(Mysql::OPTION_MULTI_STATEMENTS) ���¹Ԥ���ޤ���
395
+ </p>
396
+
363
397
  <dt>refresh(r)
364
398
  <dd>
365
399
  <p>
@@ -384,6 +418,13 @@
384
418
  �ǡ����١��������򤷤ޤ���
385
419
  </p>
386
420
 
421
+ <dt>set_server_option(opt)
422
+ <dd>
423
+ <p>
424
+ �����ǻ��ꤷ�����ץ����򥵡��Ф����ꤷ�ޤ���
425
+ �����ˤϡ�Mysql::OPTION_MULTI_STATEMENTS_ON, Mysql::OPTION_MULTI_STATEMENTS_OFF ������Ǥ��ޤ���
426
+ </p>
427
+
387
428
  <dt>shutdown()
388
429
  <dd>
389
430
  <p>
@@ -432,8 +473,17 @@
432
473
  <dl>
433
474
  <dt>query_with_result
434
475
  <dd>
435
- true �����ꤹ��� query() ���� store_result() ��¹Ԥ��ơ�Mysql::Result ���饹���֥������Ȥ��֤��ޤ���
436
- false �����ꤹ��Ȥ���ư��ϹԤ��ޤ��󡣥ǥե���Ȥ� true �Ǥ���
476
+ <p>
477
+ true �����ꤹ��� query() ���� store_result() ��¹Ԥ��ơ�Mysql::Result ���饹���֥������Ȥ��֤��ޤ���
478
+ false �����ꤹ��Ȥ���ư��ϹԤ��ޤ��󡣥ǥե���Ȥ� true �Ǥ���
479
+ </p>
480
+
481
+ <dt>reconnect
482
+ <dd>
483
+ <p>
484
+ true �����ꤹ��� MySQL �����ФȤ���³���ڤ줿�Ȥ��˼�ưŪ�˺���³���ޤ���
485
+ �ǥե���Ȥ� false �Ǥ���
486
+ </p>
437
487
  </dl>
438
488
 
439
489
  <h2>Mysql::Result ���饹</h2>
@@ -637,6 +687,34 @@
637
687
 
638
688
  <h2>����</h2>
639
689
  <dl>
690
+ <dt>2005-04-25
691
+ <dd>
692
+ version 2.6
693
+ <ul>
694
+ <li>Mysql#option() �Ѥ�����ɲ�
695
+ Mysql::OPT_PROTOCOL, Mysql::OPT_READ_TIMEOUT,
696
+ Mysql::OPT_WRITE_TIMEOUT, Mysql::SET_CHARSET_DIR,
697
+ Mysql::SET_CHARSET_NAME, Mysql::SHARED_MEMORY_BASE_NAME,
698
+ Mysql::SECURE_AUTH
699
+ <li>Mysql#more_results?(), Mysql#next_result(),
700
+ Mysql#set_server_option(), Mysql#sqlstate() �ɲ�
701
+ <li>Mysql#connect() �Υե饰������ɲ�
702
+ Mysql::CLIENT_MULTI_STATEMENTS, Mysql::CLIENT_MULTI_RESULTS
703
+ <li>Mysql#set_server_option() �Ѥ�����ɲ�
704
+ Mysql::OPTION_MULTI_STATEMENTS_ON,
705
+ Mysql::OPTION_MULTI_STATEMENTS_OFF
706
+ <li>�֥��å��դ� Mysql#query()
707
+ <li>Mysql#reconnect(), Mysql#reconnect=() �ɲ�
708
+ <li>MySQL �Ȥ���³���ڤ줿�Ȥ��ˡ��ǥե���ȤǤϺ���³���ʤ��褦�ˤ�����
709
+ </ul>
710
+
711
+ <dt>2005-02-12
712
+ <dd>
713
+ version 2.5.2
714
+ <ul>
715
+ <li>BUG: Mysql#connect ����³�������³�����Ǥ���ʤ���(Andres Salomon �˴���)
716
+ </ul>
717
+
640
718
  <dt>2004-09-20
641
719
  <dd>
642
720
  version 2.5.1
@@ -891,7 +969,7 @@
891
969
  <address><a href="mailto:tommy@tmtm.org">TOMITA Masahiro</a></address>
892
970
  <!-- Created: Sun Aug 29 11:52:09 JST 2004 -->
893
971
  <!-- hhmts start -->
894
- Last modified: Mon Sep 20 21:22:13 JST 2004
972
+ Last modified: Mon Apr 25 23:30:04 JST 2005
895
973
  <!-- hhmts end -->
896
974
  </body>
897
975
  </html>
data/mysql.c.in CHANGED
@@ -1,5 +1,5 @@
1
1
  /* ruby mysql module
2
- * $Id: mysql.c.in,v 1.8 2004/09/20 12:03:47 tommy Exp $
2
+ * $Id: mysql.c.in,v 1.16 2005/04/19 14:20:03 tommy Exp $
3
3
  */
4
4
 
5
5
  #include "ruby.h"
@@ -36,7 +36,7 @@
36
36
  #define mysql_field_count mysql_num_fields
37
37
  #endif
38
38
 
39
- #define NILorSTRING(obj) (NIL_P(obj)? NULL: STR2CSTR(obj))
39
+ #define NILorSTRING(obj) (NIL_P(obj)? NULL: StringValuePtr(obj))
40
40
  #define NILorINT(obj) (NIL_P(obj)? 0: NUM2INT(obj))
41
41
 
42
42
  #define GetMysqlStruct(obj) (Check_Type(obj, T_DATA), (struct mysql*)DATA_PTR(obj))
@@ -172,6 +172,7 @@ static VALUE real_connect(int argc, VALUE* argv, VALUE klass)
172
172
  #endif
173
173
  mysql_raise(&myp->handler);
174
174
 
175
+ myp->handler.reconnect = 0;
175
176
  myp->connection = Qtrue;
176
177
  myp->query_with_result = Qtrue;
177
178
  rb_obj_call_init(obj, argc, argv);
@@ -199,7 +200,7 @@ static VALUE client_info(VALUE klass)
199
200
  /* my_debug(string) */
200
201
  static VALUE my_debug(VALUE obj, VALUE str)
201
202
  {
202
- mysql_debug(STR2CSTR(str));
203
+ mysql_debug(StringValuePtr(str));
203
204
  return obj;
204
205
  }
205
206
  #endif
@@ -235,6 +236,8 @@ static VALUE real_connect2(int argc, VALUE* argv, VALUE obj)
235
236
 
236
237
  if (mysql_real_connect(m, h, u, p, d, pp, s, f) == NULL)
237
238
  mysql_raise(m);
239
+ m->reconnect = 0;
240
+ GetMysqlStruct(obj)->connection = Qtrue;
238
241
 
239
242
  return obj;
240
243
  }
@@ -244,12 +247,20 @@ static VALUE options(int argc, VALUE* argv, VALUE obj)
244
247
  {
245
248
  VALUE opt, val;
246
249
  int n;
250
+ my_bool b;
247
251
  char* v;
248
252
  MYSQL* m = GetHandler(obj);
249
253
 
250
254
  rb_scan_args(argc, argv, "11", &opt, &val);
251
255
  switch(NUM2INT(opt)) {
252
256
  case MYSQL_OPT_CONNECT_TIMEOUT:
257
+ #if MYSQL_VERSION_ID >= 40100
258
+ case MYSQL_OPT_PROTOCOL:
259
+ #endif
260
+ #if MYSQL_VERSION_ID >= 40101
261
+ case MYSQL_OPT_READ_TIMEOUT:
262
+ case MYSQL_OPT_WRITE_TIMEOUT:
263
+ #endif
253
264
  if (val == Qnil)
254
265
  rb_raise(rb_eArgError, "wrong # of arguments(1 for 2)");
255
266
  n = NUM2INT(val);
@@ -258,10 +269,26 @@ static VALUE options(int argc, VALUE* argv, VALUE obj)
258
269
  case MYSQL_INIT_COMMAND:
259
270
  case MYSQL_READ_DEFAULT_FILE:
260
271
  case MYSQL_READ_DEFAULT_GROUP:
272
+ #if MYSQL_VERSION_ID >= 32349
273
+ case MYSQL_SET_CHARSET_DIR:
274
+ case MYSQL_SET_CHARSET_NAME:
275
+ #endif
276
+ #if MYSQL_VERSION_ID >= 40100
277
+ case MYSQL_SHARED_MEMORY_BASE_NAME:
278
+ #endif
261
279
  if (val == Qnil)
262
280
  rb_raise(rb_eArgError, "wrong # of arguments(1 for 2)");
263
- v = STR2CSTR(val);
281
+ v = StringValuePtr(val);
264
282
  break;
283
+ #if MYSQL_VERSION_ID >= 40101
284
+ case MYSQL_SECURE_AUTH:
285
+ if (val == Qnil || val == Qfalse)
286
+ b = 1;
287
+ else
288
+ b = 0;
289
+ v = (char*)&b;
290
+ break;
291
+ #endif
265
292
  #if MYSQL_VERSION_ID >= 32349
266
293
  case MYSQL_OPT_LOCAL_INFILE:
267
294
  if (val == Qnil || val == Qfalse)
@@ -348,7 +375,7 @@ static VALUE my_close(VALUE obj)
348
375
  static VALUE create_db(VALUE obj, VALUE db)
349
376
  {
350
377
  MYSQL* m = GetHandler(obj);
351
- if (mysql_create_db(m, STR2CSTR(db)) != 0)
378
+ if (mysql_create_db(m, StringValuePtr(db)) != 0)
352
379
  mysql_raise(m);
353
380
  return obj;
354
381
  }
@@ -357,7 +384,7 @@ static VALUE create_db(VALUE obj, VALUE db)
357
384
  static VALUE drop_db(VALUE obj, VALUE db)
358
385
  {
359
386
  MYSQL* m = GetHandler(obj);
360
- if (mysql_drop_db(m, STR2CSTR(db)) != 0)
387
+ if (mysql_drop_db(m, StringValuePtr(db)) != 0)
361
388
  mysql_raise(m);
362
389
  return obj;
363
390
  }
@@ -461,7 +488,7 @@ static VALUE list_fields(int argc, VALUE* argv, VALUE obj)
461
488
  MYSQL* m = GetHandler(obj);
462
489
  MYSQL_RES* res;
463
490
  rb_scan_args(argc, argv, "11", &table, &field);
464
- res = mysql_list_fields(m, STR2CSTR(table), NILorSTRING(field));
491
+ res = mysql_list_fields(m, StringValuePtr(table), NILorSTRING(field));
465
492
  if (res == NULL)
466
493
  mysql_raise(m);
467
494
  return mysqlres2obj(res);
@@ -530,7 +557,7 @@ static VALUE reload(VALUE obj)
530
557
  static VALUE select_db(VALUE obj, VALUE db)
531
558
  {
532
559
  MYSQL* m = GetHandler(obj);
533
- if (mysql_select_db(m, STR2CSTR(db)) != 0)
560
+ if (mysql_select_db(m, StringValuePtr(db)) != 0)
534
561
  mysql_raise(m);
535
562
  return obj;
536
563
  }
@@ -592,6 +619,31 @@ static VALUE query(VALUE obj, VALUE sql)
592
619
  {
593
620
  MYSQL* m = GetHandler(obj);
594
621
  Check_Type(sql, T_STRING);
622
+ if (rb_block_given_p()) {
623
+ #if MYSQL_VERSION_ID >= 40101
624
+ if (mysql_set_server_option(m, MYSQL_OPTION_MULTI_STATEMENTS_ON) != 0)
625
+ mysql_raise(m);
626
+ #endif
627
+ if (mysql_real_query(m, RSTRING(sql)->ptr, RSTRING(sql)->len) != 0)
628
+ mysql_raise(m);
629
+ do {
630
+ MYSQL_RES* res = mysql_store_result(m);
631
+ if (res == NULL) {
632
+ if (mysql_field_count(m) != 0)
633
+ mysql_raise(m);
634
+ } else {
635
+ static VALUE res_free(VALUE);
636
+ VALUE robj = mysqlres2obj(res);
637
+ rb_ensure(rb_yield, robj, res_free, robj);
638
+ }
639
+ }
640
+ #if MYSQL_VERSION_ID >= 40101
641
+ while (mysql_next_result(m) == 0);
642
+ #else
643
+ while (0);
644
+ #endif
645
+ return obj;
646
+ }
595
647
  if (mysql_real_query(m, RSTRING(sql)->ptr, RSTRING(sql)->len) != 0)
596
648
  mysql_raise(m);
597
649
  if (GetMysqlStruct(obj)->query_with_result == Qfalse)
@@ -637,7 +689,7 @@ static VALUE autocommit(VALUE obj, VALUE mode)
637
689
  {
638
690
  MYSQL* m = GetHandler(obj);
639
691
  int f;
640
- f = (mode == Qnil || mode == Qfalse || NUM2INT(mode) == 0) ? 0 : 1;
692
+ f = (mode == Qnil || mode == Qfalse || (rb_type(mode) == T_FIXNUM && NUM2INT(mode) == 0)) ? 0 : 1;
641
693
  if (mysql_autocommit(m, f) != 0)
642
694
  mysql_raise(m);
643
695
  return obj;
@@ -662,6 +714,47 @@ static VALUE ssl_set(int argc, VALUE* argv, VALUE obj)
662
714
  }
663
715
  #endif
664
716
 
717
+ #if MYSQL_VERSION_ID >= 40100
718
+ /* more_results() */
719
+ static VALUE more_results(VALUE obj)
720
+ {
721
+ if (mysql_more_results(GetHandler(obj)) == 0)
722
+ return Qfalse;
723
+ else
724
+ return Qtrue;
725
+ }
726
+
727
+ static VALUE next_result(VALUE obj)
728
+ {
729
+ MYSQL* m = GetHandler(obj);
730
+ int ret;
731
+ ret = mysql_next_result(m);
732
+ if (ret > 0)
733
+ mysql_raise(m);
734
+ if (ret == 0)
735
+ return Qtrue;
736
+ return Qfalse;
737
+ }
738
+ #endif
739
+
740
+ #if MYSQL_VERSION_ID >= 40101
741
+ /* set_server_option(option) */
742
+ static VALUE set_server_option(VALUE obj, VALUE option)
743
+ {
744
+ MYSQL *m = GetHandler(obj);
745
+ if (mysql_set_server_option(m, NUM2INT(option)) != 0)
746
+ mysql_raise(m);
747
+ return obj;
748
+ }
749
+
750
+ /* sqlstate() */
751
+ static VALUE sqlstate(VALUE obj)
752
+ {
753
+ MYSQL *m = GetHandler(obj);
754
+ return rb_tainted_str_new2(mysql_sqlstate(m));
755
+ }
756
+ #endif
757
+
665
758
  /* query_with_result() */
666
759
  static VALUE query_with_result(VALUE obj)
667
760
  {
@@ -681,6 +774,19 @@ static VALUE query_with_result_set(VALUE obj, VALUE flag)
681
774
  return flag;
682
775
  }
683
776
 
777
+ /* reconnect() */
778
+ static VALUE reconnect(VALUE obj)
779
+ {
780
+ return GetHandler(obj)->reconnect ? Qtrue : Qfalse;
781
+ }
782
+
783
+ /* reconnect=(flag) */
784
+ static VALUE reconnect_set(VALUE obj, VALUE flag)
785
+ {
786
+ GetHandler(obj)->reconnect = (flag == Qnil || flag == Qfalse) ? 0 : 1;
787
+ return flag;
788
+ }
789
+
684
790
  /*-------------------------------
685
791
  * Mysql::Result object method
686
792
  */
@@ -931,7 +1037,7 @@ static VALUE field_hash(VALUE obj)
931
1037
  static VALUE field_inspect(VALUE obj)
932
1038
  {
933
1039
  VALUE n = rb_iv_get(obj, "name");
934
- VALUE s = rb_str_new(0, RSTRING(n)->len + 14);
1040
+ VALUE s = rb_str_new(0, RSTRING(n)->len + 16);
935
1041
  sprintf(RSTRING(s)->ptr, "#<Mysql::Field:%s>", RSTRING(n)->ptr);
936
1042
  return s;
937
1043
  }
@@ -973,7 +1079,6 @@ static VALUE field_is_pri_key(VALUE obj)
973
1079
  }
974
1080
  #endif
975
1081
 
976
-
977
1082
  /*-------------------------------
978
1083
  * Mysql::Error object method
979
1084
  */
@@ -1075,6 +1180,7 @@ void Init_mysql(void)
1075
1180
  rb_define_method(cMysql, "ping", ping, 0);
1076
1181
  #endif
1077
1182
  rb_define_method(cMysql, "query", query, 1);
1183
+ rb_define_method(cMysql, "real_query", query, 1);
1078
1184
  rb_define_method(cMysql, "refresh", refresh, 1);
1079
1185
  rb_define_method(cMysql, "reload", reload, 0);
1080
1186
  rb_define_method(cMysql, "select_db", select_db, 1);
@@ -1093,10 +1199,22 @@ void Init_mysql(void)
1093
1199
  #endif
1094
1200
  #ifdef HAVE_MYSQL_SSL_SET
1095
1201
  rb_define_method(cMysql, "ssl_set", ssl_set, -1);
1202
+ #endif
1203
+ #if MYSQL_VERSION_ID >= 40100
1204
+ rb_define_method(cMysql, "more_results", more_results, 0);
1205
+ rb_define_method(cMysql, "more_results?", more_results, 0);
1206
+ rb_define_method(cMysql, "next_result", next_result, 0);
1207
+ #endif
1208
+ #if MYSQL_VERSION_ID >= 40101
1209
+ rb_define_method(cMysql, "set_server_option", set_server_option, 1);
1210
+ rb_define_method(cMysql, "sqlstate", sqlstate, 0);
1096
1211
  #endif
1097
1212
  rb_define_method(cMysql, "query_with_result", query_with_result, 0);
1098
1213
  rb_define_method(cMysql, "query_with_result=", query_with_result_set, 1);
1099
1214
 
1215
+ rb_define_method(cMysql, "reconnect", reconnect, 0);
1216
+ rb_define_method(cMysql, "reconnect=", reconnect_set, 1);
1217
+
1100
1218
  /* Mysql constant */
1101
1219
  #if MYSQL_VERSION_ID >= 32200
1102
1220
  rb_define_const(cMysql, "OPT_CONNECT_TIMEOUT", INT2NUM(MYSQL_OPT_CONNECT_TIMEOUT));
@@ -1107,7 +1225,18 @@ void Init_mysql(void)
1107
1225
  rb_define_const(cMysql, "READ_DEFAULT_GROUP", INT2NUM(MYSQL_READ_DEFAULT_GROUP));
1108
1226
  #endif
1109
1227
  #if MYSQL_VERSION_ID >= 32349
1228
+ rb_define_const(cMysql, "SET_CHARSET_DIR", INT2NUM(MYSQL_SET_CHARSET_DIR));
1229
+ rb_define_const(cMysql, "SET_CHARSET_NAME", INT2NUM(MYSQL_SET_CHARSET_NAME));
1110
1230
  rb_define_const(cMysql, "OPT_LOCAL_INFILE", INT2NUM(MYSQL_OPT_LOCAL_INFILE));
1231
+ #endif
1232
+ #if MYSQL_VERSION_ID >= 40100
1233
+ rb_define_const(cMysql, "OPT_PROTOCOL", INT2NUM(MYSQL_OPT_PROTOCOL));
1234
+ rb_define_const(cMysql, "SHARED_MEMORY_BASE_NAME", INT2NUM(MYSQL_SHARED_MEMORY_BASE_NAME));
1235
+ #endif
1236
+ #if MYSQL_VERSION_ID >= 40101
1237
+ rb_define_const(cMysql, "OPT_READ_TIMEOUT", INT2NUM(MYSQL_OPT_READ_TIMEOUT));
1238
+ rb_define_const(cMysql, "OPT_WRITE_TIMEOUT", INT2NUM(MYSQL_OPT_WRITE_TIMEOUT));
1239
+ rb_define_const(cMysql, "SECURE_AUTH", INT2NUM(MYSQL_SECURE_AUTH));
1111
1240
  #endif
1112
1241
  rb_define_const(cMysql, "REFRESH_GRANT", INT2NUM(REFRESH_GRANT));
1113
1242
  rb_define_const(cMysql, "REFRESH_LOG", INT2NUM(REFRESH_LOG));
@@ -1166,6 +1295,16 @@ void Init_mysql(void)
1166
1295
  #ifdef CLIENT_TRANSACTIONS
1167
1296
  rb_define_const(cMysql, "CLIENT_TRANSACTIONS", INT2NUM(CLIENT_TRANSACTIONS));
1168
1297
  #endif
1298
+ #ifdef CLIENT_MULTI_STATEMENTS
1299
+ rb_define_const(cMysql, "CLIENT_MULTI_STATEMENTS", INT2NUM(CLIENT_MULTI_STATEMENTS));
1300
+ #endif
1301
+ #ifdef CLIENT_MULTI_RESULTS
1302
+ rb_define_const(cMysql, "CLIENT_MULTI_RESULTS", INT2NUM(CLIENT_MULTI_RESULTS));
1303
+ #endif
1304
+ #if MYSQL_VERSION_ID >= 40101
1305
+ rb_define_const(cMysql, "OPTION_MULTI_STATEMENTS_ON", INT2NUM(MYSQL_OPTION_MULTI_STATEMENTS_ON));
1306
+ rb_define_const(cMysql, "OPTION_MULTI_STATEMENTS_OFF", INT2NUM(MYSQL_OPTION_MULTI_STATEMENTS_OFF));
1307
+ #endif
1169
1308
 
1170
1309
  /* Mysql::Result object method */
1171
1310
  rb_define_method(cMysqlRes, "data_seek", data_seek, 1);
@@ -1258,6 +1397,9 @@ void Init_mysql(void)
1258
1397
  #ifdef NUM_FLAG
1259
1398
  rb_define_const(cMysqlField, "NUM_FLAG", INT2NUM(NUM_FLAG));
1260
1399
  #endif
1400
+ #ifdef PART_KEY_FLAG
1401
+ rb_define_const(cMysqlField, "PART_KEY_FLAG", INT2NUM(PART_KEY_FLAG));
1402
+ #endif
1261
1403
 
1262
1404
  /* Mysql::Error object method */
1263
1405
  rb_define_method(eMysql, "error", error_error, 0);
@@ -0,0 +1,11 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = %q{mysql}
3
+ s.version = "2.6"
4
+ s.date = %q{2005-06-23}
5
+ s.summary = %q{MySQL/Ruby provides the same functions for Ruby programs that the MySQL C API provides for C programs.}
6
+ s.email = %q{tommy@tmtm.org}
7
+ s.homepage = %q{http://www.tmtm.org/en/mysql/ruby/}
8
+ s.autorequire = %q{mysql}
9
+ s.files = [ "COPYING", "COPYING.ja", "README.html", "README_ja.html", "extconf.rb", "mysql.c.in", "test.rb", "tommy.css", "mysql.gemspec"]
10
+ s.extensions = ["extconf.rb"]
11
+ end
data/test.rb CHANGED
@@ -1,33 +1,359 @@
1
- # This is script to test for mysql-ruby module.
2
- # $Id: test.rb,v 1.5 2002/01/07 01:17:28 tommy Exp $
3
- #
4
- # Execute in mysql-ruby top directory.
5
- # Modify following $host, $user, $passwd and $db if needed.
6
- # $host: hostname mysql running
7
- # $user: mysql username (not unix login user)
8
- # $passwd: mysql access passwd for $user
9
- # $db: database name for this test. it must not exist before testing.
1
+ #!/usr/local/bin/ruby
2
+ # $Id: test.rb,v 1.6 2005/04/25 14:34:19 tommy Exp $
10
3
 
4
+ require "test/unit"
11
5
  require "./mysql.o"
12
6
 
13
- $host = ARGV.shift
14
- $user = ARGV.shift
15
- $passwd = ARGV.shift
16
- $db = ARGV.shift || "rubytest"
17
-
18
- begin
19
- Dir.glob("t/[0-9]*.rb").sort.each do |f|
20
- f =~ /^t\/\d+(.*)\.rb$/
21
- print $1 + "."*(20-$1.length)
22
- $stdout.flush
23
- load f
24
- print "ok\n"
25
- end
26
- ensure
27
- if $created
28
- begin
29
- Mysql.new($host, $user, $passwd).query("drop database #{$db}")
30
- rescue
7
+ class TC_Mysql < Test::Unit::TestCase
8
+ def setup()
9
+ @host, @user, @pass, db, port, sock, flag = ARGV
10
+ @db = db || "test"
11
+ @port = port.to_i
12
+ @sock = sock.nil? || sock.empty? ? nil : sock
13
+ @flag = flag.to_i
14
+ end
15
+ def teardown()
16
+ end
17
+
18
+ def test_init()
19
+ assert_nothing_raised{@m = Mysql.init}
20
+ assert_nothing_raised{@m.close}
21
+ end
22
+
23
+ def test_real_connect()
24
+ assert_nothing_raised{@m = Mysql.real_connect(@host, @user, @pass, @db, @port, @sock, @flag)}
25
+ assert_nothing_raised{@m.close}
26
+ end
27
+
28
+ def test_connect()
29
+ assert_nothing_raised{@m = Mysql.connect(@host, @user, @pass, @db, @port, @sock, @flag)}
30
+ assert_nothing_raised{@m.close}
31
+ end
32
+
33
+ def test_new()
34
+ assert_nothing_raised{@m = Mysql.new(@host, @user, @pass, @db, @port, @sock, @flag)}
35
+ assert_nothing_raised{@m.close}
36
+ end
37
+
38
+ def test_escape_string()
39
+ assert_equal("abc\\'def\\\"ghi\\0jkl%mno", Mysql.escape_string("abc'def\"ghi\0jkl%mno"))
40
+ end
41
+
42
+ def test_quote()
43
+ assert_equal("abc\\'def\\\"ghi\\0jkl%mno", Mysql.quote("abc'def\"ghi\0jkl%mno"))
44
+ end
45
+
46
+ def test_get_client_info()
47
+ assert_match(/^\d.\d+.\d+$/, Mysql.get_client_info())
48
+ end
49
+
50
+ def test_client_info()
51
+ assert_match(/^\d.\d+.\d+$/, Mysql.client_info())
52
+ end
53
+
54
+ def test_options()
55
+ @m = Mysql.init
56
+ assert_equal(@m, @m.options(Mysql::INIT_COMMAND, "SET AUTOCOMMIT=0"))
57
+ assert_equal(@m, @m.options(Mysql::OPT_COMPRESS))
58
+ assert_equal(@m, @m.options(Mysql::OPT_CONNECT_TIMEOUT, 10))
59
+ assert_equal(@m, @m.options(Mysql::OPT_LOCAL_INFILE, true))
60
+ # assert_equal(@m, @m.options(Mysql::OPT_NAMED_PIPE))
61
+ # assert_equal(@m, @m.options(Mysql::OPT_PROTOCOL, 1))
62
+ assert_equal(@m, @m.options(Mysql::OPT_READ_TIMEOUT, 10))
63
+ assert_equal(@m, @m.options(Mysql::OPT_WRITE_TIMEOUT, 10))
64
+ # assert_equal(@m, @m.options(Mysql::READ_DEFAULT_FILE, "/tmp/hoge"))
65
+ assert_equal(@m, @m.options(Mysql::READ_DEFAULT_GROUP, "test"))
66
+ assert_equal(@m, @m.options(Mysql::SECURE_AUTH, true))
67
+ # assert_equal(@m, @m.options(Mysql::SET_CHARSET_DIR, "??"))
68
+ assert_equal(@m, @m.options(Mysql::SET_CHARSET_NAME, "latin1"))
69
+ # assert_equal(@m, @m.options(Mysql::SHARED_MEMORY_BASE_NAME, "xxx"))
70
+ assert_equal(@m, @m.connect(@host, @user, @pass, @db, @port, @sock, @flag))
71
+ @m.close
72
+ end
73
+
74
+ def test_real_connect()
75
+ @m = Mysql.init
76
+ assert_equal(@m, @m.real_connect(@host, @user, @pass, @db, @port, @sock, @flag))
77
+ @m.close
78
+ end
79
+
80
+ def test_connect()
81
+ @m = Mysql.init
82
+ assert_equal(@m, @m.connect(@host, @user, @pass, @db, @port, @sock, @flag))
83
+ @m.close
84
+ end
85
+
86
+ end
87
+
88
+ class TC_Mysql2 < Test::Unit::TestCase
89
+ def setup()
90
+ @host, @user, @pass, db, port, sock, flag = ARGV
91
+ @db = db || "test"
92
+ @port = port.to_i
93
+ @sock = sock.nil? || sock.empty? ? nil : sock
94
+ @flag = flag.to_i
95
+ @m = Mysql.new(@host, @user, @pass, @db, @port, @sock, @flag)
96
+ end
97
+ def teardown()
98
+ @m.close
99
+ end
100
+
101
+ def test_affected_rows()
102
+ @m.query("create temporary table t (id int)")
103
+ @m.query("insert into t values (1)")
104
+ assert_equal(1, @m.affected_rows)
105
+ end
106
+
107
+ def test_autocommit()
108
+ if @m.methods.include? "autocommit" then
109
+ assert_equal(@m, @m.autocommit(true))
110
+ assert_equal(@m, @m.autocommit(false))
111
+ end
112
+ end
113
+
114
+ # def test_ssl_set()
115
+ # end
116
+
117
+ def test_more_results_next_result()
118
+ if @m.methods.include? "more_results" then
119
+ @m.query_with_result = false
120
+ @m.set_server_option(Mysql::OPTION_MULTI_STATEMENTS_ON)
121
+ @m.query("select 1,2,3; select 4,5,6")
122
+ res = @m.store_result
123
+ assert_equal(["1","2","3"], res.fetch_row)
124
+ assert_equal(nil, res.fetch_row)
125
+ assert_equal(true, @m.more_results)
126
+ assert_equal(true, @m.more_results?)
127
+ assert_equal(true, @m.next_result)
128
+ res = @m.store_result
129
+ assert_equal(["4","5","6"], res.fetch_row)
130
+ assert_equal(nil, res.fetch_row)
131
+ assert_equal(false, @m.more_results)
132
+ assert_equal(false, @m.more_results?)
133
+ assert_equal(false, @m.next_result)
31
134
  end
32
135
  end
136
+
137
+ def test_set_server_option()
138
+ assert_equal(@m, @m.set_server_option(Mysql::OPTION_MULTI_STATEMENTS_ON))
139
+ assert_equal(@m, @m.set_server_option(Mysql::OPTION_MULTI_STATEMENTS_OFF))
140
+ end
141
+
142
+ def test_sqlstate()
143
+ assert_equal("00000", @m.sqlstate)
144
+ assert_raises(Mysql::Error){@m.query("hogehoge")}
145
+ assert_equal("42000", @m.sqlstate)
146
+ end
147
+
148
+ def test_query_with_result()
149
+ assert_equal(true, @m.query_with_result)
150
+ assert_equal(false, @m.query_with_result = false)
151
+ assert_equal(false, @m.query_with_result)
152
+ assert_equal(true, @m.query_with_result = true)
153
+ assert_equal(true, @m.query_with_result)
154
+ end
155
+
156
+ def test_reconnect()
157
+ assert_equal(false, @m.reconnect)
158
+ assert_equal(true, @m.reconnect = true)
159
+ assert_equal(true, @m.reconnect)
160
+ assert_equal(false, @m.reconnect = false)
161
+ assert_equal(false, @m.reconnect)
162
+ end
33
163
  end
164
+
165
+ class TC_MysqlRes < Test::Unit::TestCase
166
+ def setup()
167
+ @host, @user, @pass, db, port, sock, flag = ARGV
168
+ @db = db || "test"
169
+ @port = port.to_i
170
+ @sock = sock.nil? || sock.empty? ? nil : sock
171
+ @flag = flag.to_i
172
+ @m = Mysql.new(@host, @user, @pass, @db, @port, @sock, @flag)
173
+ @m.query("create temporary table t (id int, str char(10), primary key (id))")
174
+ @m.query("insert into t values (1, 'abc'), (2, 'defg'), (3, 'hi')")
175
+ @res = @m.query("select * from t")
176
+ end
177
+ def teardown()
178
+ @res.free
179
+ @m.close
180
+ end
181
+
182
+ def test_num_fields()
183
+ assert_equal(2, @res.num_fields)
184
+ end
185
+
186
+ def test_num_rows()
187
+ assert_equal(3, @res.num_rows)
188
+ end
189
+
190
+ def test_fetch_row()
191
+ assert_equal(["1","abc"], @res.fetch_row)
192
+ assert_equal(["2","defg"], @res.fetch_row)
193
+ assert_equal(["3","hi"], @res.fetch_row)
194
+ assert_equal(nil, @res.fetch_row)
195
+ end
196
+
197
+ def test_fetch_hash()
198
+ assert_equal({"id"=>"1", "str"=>"abc"}, @res.fetch_hash)
199
+ assert_equal({"id"=>"2", "str"=>"defg"}, @res.fetch_hash)
200
+ assert_equal({"id"=>"3", "str"=>"hi"}, @res.fetch_hash)
201
+ assert_equal(nil, @res.fetch_hash)
202
+ end
203
+
204
+ def test_fetch_hash2()
205
+ assert_equal({"t.id"=>"1", "t.str"=>"abc"}, @res.fetch_hash(true))
206
+ assert_equal({"t.id"=>"2", "t.str"=>"defg"}, @res.fetch_hash(true))
207
+ assert_equal({"t.id"=>"3", "t.str"=>"hi"}, @res.fetch_hash(true))
208
+ assert_equal(nil, @res.fetch_hash)
209
+ end
210
+
211
+ def test_each()
212
+ ary = [["1","abc"], ["2","defg"], ["3","hi"]]
213
+ @res.each do |a|
214
+ assert_equal(ary.shift, a)
215
+ end
216
+ end
217
+
218
+ def test_each_hash()
219
+ hash = [{"id"=>"1","str"=>"abc"}, {"id"=>"2","str"=>"defg"}, {"id"=>"3","str"=>"hi"}]
220
+ @res.each_hash do |h|
221
+ assert_equal(hash.shift, h)
222
+ end
223
+ end
224
+
225
+ def test_data_seek()
226
+ assert_equal(["1","abc"], @res.fetch_row)
227
+ assert_equal(["2","defg"], @res.fetch_row)
228
+ assert_equal(["3","hi"], @res.fetch_row)
229
+ @res.data_seek(1)
230
+ assert_equal(["2","defg"], @res.fetch_row)
231
+ end
232
+
233
+ def test_row_seek()
234
+ assert_equal(["1","abc"], @res.fetch_row)
235
+ pos = @res.row_tell
236
+ assert_equal(["2","defg"], @res.fetch_row)
237
+ assert_equal(["3","hi"], @res.fetch_row)
238
+ @res.row_seek(pos)
239
+ assert_equal(["2","defg"], @res.fetch_row)
240
+ end
241
+
242
+ def test_field_seek()
243
+ assert_equal(0, @res.field_tell)
244
+ @res.fetch_field
245
+ assert_equal(1, @res.field_tell)
246
+ @res.fetch_field
247
+ assert_equal(2, @res.field_tell)
248
+ @res.field_seek(1)
249
+ assert_equal(1, @res.field_tell)
250
+ end
251
+
252
+ def test_fetch_field()
253
+ f = @res.fetch_field
254
+ assert_equal("id", f.name)
255
+ assert_equal("t", f.table)
256
+ assert_equal(nil, f.def)
257
+ assert_equal(Mysql::Field::TYPE_LONG, f.type)
258
+ assert_equal(11, f.length)
259
+ assert_equal(1, f.max_length)
260
+ assert_equal(Mysql::Field::NUM_FLAG|Mysql::Field::PRI_KEY_FLAG|Mysql::Field::PART_KEY_FLAG|Mysql::Field::NOT_NULL_FLAG, f.flags)
261
+ assert_equal(0, f.decimals)
262
+ f = @res.fetch_field
263
+ assert_equal("str", f.name)
264
+ assert_equal("t", f.table)
265
+ assert_equal(nil, f.def)
266
+ assert_equal(Mysql::Field::TYPE_STRING, f.type)
267
+ assert_equal(10, f.length)
268
+ assert_equal(4, f.max_length)
269
+ assert_equal(0, f.flags)
270
+ assert_equal(0, f.decimals)
271
+ f = @res.fetch_field
272
+ assert_equal(nil, f)
273
+ end
274
+
275
+ def test_fetch_fields()
276
+ a = @res.fetch_fields
277
+ assert_equal(2, a.size)
278
+ assert_equal("id", a[0].name)
279
+ assert_equal("str", a[1].name)
280
+ end
281
+
282
+ def test_fetch_field_direct()
283
+ f = @res.fetch_field_direct(0)
284
+ assert_equal("id", f.name)
285
+ f = @res.fetch_field_direct(1)
286
+ assert_equal("str", f.name)
287
+ assert_raises(Mysql::Error){@res.fetch_field_direct(-1)}
288
+ assert_raises(Mysql::Error){@res.fetch_field_direct(2)}
289
+ end
290
+
291
+ def test_fetch_lengths()
292
+ assert_equal(nil, @res.fetch_lengths())
293
+ @res.fetch_row
294
+ assert_equal([1, 3], @res.fetch_lengths())
295
+ @res.fetch_row
296
+ assert_equal([1, 4], @res.fetch_lengths())
297
+ @res.fetch_row
298
+ assert_equal([1, 2], @res.fetch_lengths())
299
+ @res.fetch_row
300
+ assert_equal(nil, @res.fetch_lengths())
301
+ end
302
+
303
+ def test_field_hash()
304
+ f = @res.fetch_field
305
+ h = {
306
+ "name" => "id",
307
+ "table" => "t",
308
+ "def" => nil,
309
+ "type" => Mysql::Field::TYPE_LONG,
310
+ "length" => 11,
311
+ "max_length" => 1,
312
+ "flags" => Mysql::Field::NUM_FLAG|Mysql::Field::PRI_KEY_FLAG|Mysql::Field::PART_KEY_FLAG|Mysql::Field::NOT_NULL_FLAG,
313
+ "decimals" => 0,
314
+ }
315
+ assert_equal(h, f.hash)
316
+ f = @res.fetch_field
317
+ h = {
318
+ "name" => "str",
319
+ "table" => "t",
320
+ "def" => nil,
321
+ "type" => Mysql::Field::TYPE_STRING,
322
+ "length" => 10,
323
+ "max_length" => 4,
324
+ "flags" => 0,
325
+ "decimals" => 0,
326
+ }
327
+ assert_equal(h, f.hash)
328
+ end
329
+
330
+ def test_field_inspect()
331
+ f = @res.fetch_field
332
+ assert_equal("#<Mysql::Field:id>", f.inspect)
333
+ f = @res.fetch_field
334
+ assert_equal("#<Mysql::Field:str>", f.inspect)
335
+ end
336
+
337
+ def test_is_num()
338
+ f = @res.fetch_field
339
+ assert_equal(true, f.is_num?)
340
+ f = @res.fetch_field
341
+ assert_equal(false, f.is_num?)
342
+ end
343
+
344
+ def test_is_not_null()
345
+ f = @res.fetch_field
346
+ assert_equal(true, f.is_not_null?)
347
+ f = @res.fetch_field
348
+ assert_equal(false, f.is_not_null?)
349
+ end
350
+
351
+ def test_is_pri_key()
352
+ f = @res.fetch_field
353
+ assert_equal(true, f.is_pri_key?)
354
+ f = @res.fetch_field
355
+ assert_equal(false, f.is_pri_key?)
356
+ end
357
+
358
+ end
359
+
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: "0.8"
2
+ rubygems_version: 0.8.10
3
3
  specification_version: 1
4
4
  name: mysql
5
5
  version: !ruby/object:Gem::Version
6
- version: 2.5.1
7
- date: 2004-10-20
6
+ version: "2.6"
7
+ date: 2005-06-23
8
8
  summary: MySQL/Ruby provides the same functions for Ruby programs that the MySQL C API provides for C programs.
9
9
  require_paths:
10
10
  - lib
11
- author: TOMITA Masahiro
12
11
  email: tommy@tmtm.org
13
12
  homepage: http://www.tmtm.org/en/mysql/ruby/
14
13
  rubyforge_project:
@@ -25,28 +24,17 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
25
24
  version: 0.0.0
26
25
  version:
27
26
  platform: ruby
27
+ authors: []
28
28
  files:
29
- - t
30
29
  - COPYING
31
30
  - COPYING.ja
32
31
  - README.html
33
32
  - README_ja.html
34
33
  - extconf.rb
35
- - mysql-compat.rb
36
34
  - mysql.c.in
37
35
  - test.rb
38
36
  - tommy.css
39
- - mysql-ruby-2.5.1.gem
40
- - mysql-ruby.gemspec
41
- - t/00connect.rb
42
- - t/10create_db.rb
43
- - t/20create_table.rb
44
- - t/30insert.rb
45
- - t/40select.rb
46
- - t/50update.rb
47
- - t/60drop_table.rb
48
- - t/70drop_db.rb
49
- - t/80close.rb
37
+ - mysql.gemspec
50
38
  test_files: []
51
39
  rdoc_options: []
52
40
  extra_rdoc_files: []
@@ -1,62 +0,0 @@
1
- # for compatibility with 1.x
2
- # $Id: mysql-compat.rb,v 1.2 1998/11/29 13:02:15 tommy Exp $
3
-
4
- require 'mysql.o'
5
-
6
- class Mysql
7
- def Mysql.connect(host=nil, db=nil, user=nil, pass=nil)
8
- Mysql.real_connect(host, user, pass, db)
9
- end
10
- def Mysql.new(host=nil, db=nil, user=nil, pass=nil)
11
- Mysql.real_connect(host, user, pass, db)
12
- end
13
-
14
- alias selectdb select_db
15
- alias affectedrows affected_rows
16
- alias insertid insert_id
17
- alias createdb create_db
18
- alias dropdb drop_db
19
-
20
- def listdbs()
21
- ret = []
22
- query("show databases").each {|x| ret << x[0]}
23
- ret
24
- end
25
-
26
- def listtables()
27
- ret = []
28
- query("show tables").each {|x| ret << x[0]}
29
- ret
30
- end
31
-
32
- def listfields(table)
33
- query("show fields from #{table}")
34
- end
35
- end
36
-
37
- class MysqlRes
38
- alias numrows num_rows
39
- alias numfields num_fields
40
- alias fetchrow fetch_row
41
- alias dataseek data_seek
42
-
43
- def fetchfields()
44
- ret = []
45
- fetch_fields.each{|f| ret << f.name}
46
- ret
47
- end
48
-
49
- def fetchhash()
50
- row = fetchrow or return nil
51
- fields = fetchfields
52
- ret = {}
53
- fields.each_index {|i| ret[fields[i]] = row[i]}
54
- ret
55
- end
56
-
57
- def each_hash()
58
- while hash = fetchhash
59
- yield hash
60
- end
61
- end
62
- end
Binary file
@@ -1,20 +0,0 @@
1
- require 'rubygems'
2
-
3
- SPEC = Gem::Specification.new do |s|
4
- s.name = "mysql"
5
- s.version = "2.5.1"
6
- s.author = "TOMITA Masahiro"
7
- s.email = "tommy@tmtm.org"
8
- s.homepage = "http://www.tmtm.org/en/mysql/ruby/"
9
- s.platform = Gem::Platform::RUBY
10
- s.summary = "MySQL/Ruby provides the same functions for Ruby programs that the MySQL C API provides for C programs."
11
- s.extensions = %w{extconf.rb}
12
- s.has_rdoc = false
13
- s.autorequire = "mysql"
14
- s.files = Dir.glob('**/*')
15
- end
16
-
17
- if $0 == __FILE__
18
- Gem::manage_gems
19
- Gem::Builder.new(spec).build
20
- end
@@ -1 +0,0 @@
1
- $my = Mysql.connect($host, $user, $passwd)
@@ -1,3 +0,0 @@
1
- $my.query("create database #{$db}")
2
- $created = true
3
- $my.select_db $db
@@ -1 +0,0 @@
1
- $my.query("create table test (id int not null, str char(32) not null)")
@@ -1,2 +0,0 @@
1
- $my.query("insert into test (id, str) values (1, 'foo')")
2
- $my.query("insert into test (id, str) values (2, 'bar')")
@@ -1,4 +0,0 @@
1
- res = $my.query("select * from test")
2
- if res.num_rows != 2 then raise "num_rows: failed" end
3
- if res.fetch_row != ["1", "foo"] then raise "fetch_row: failed" end
4
- if res.fetch_hash != {"id"=>"2", "str"=>"bar"} then raise "fetch_hash: failed" end
@@ -1,2 +0,0 @@
1
- $my.query("update test set id=0, str='hoge'")
2
- if $my.affected_rows != 2 then raise "update: failed" end
@@ -1 +0,0 @@
1
- $my.query("drop table test")
@@ -1,2 +0,0 @@
1
- $my.query("drop database #{$db}")
2
- $created = false
@@ -1 +0,0 @@
1
- $my.close