Class: Mysql

Inherits:
Object
  • Object
show all
Defined in:
lib/mysqlplus.rb,
ext/mysql.c

Overview

Mysqlplus library gives you a [slightly modified] version of the Mysql class See www.kitebird.com/articles/ruby-mysql.html for details, as well as the test directory within the library

Defined Under Namespace

Classes: Error, Field, Result, RowOffset, Stmt, Time

Constant Summary collapse

VERSION =

Mysql constant

INT2FIX(MYSQL_RUBY_VERSION)
OPT_CONNECT_TIMEOUT =
INT2NUM(MYSQL_OPT_CONNECT_TIMEOUT)
OPT_COMPRESS =
INT2NUM(MYSQL_OPT_COMPRESS)
OPT_NAMED_PIPE =
INT2NUM(MYSQL_OPT_NAMED_PIPE)
INIT_COMMAND =
INT2NUM(MYSQL_INIT_COMMAND)
READ_DEFAULT_FILE =
INT2NUM(MYSQL_READ_DEFAULT_FILE)
READ_DEFAULT_GROUP =
INT2NUM(MYSQL_READ_DEFAULT_GROUP)
SET_CHARSET_DIR =
INT2NUM(MYSQL_SET_CHARSET_DIR)
SET_CHARSET_NAME =
INT2NUM(MYSQL_SET_CHARSET_NAME)
OPT_LOCAL_INFILE =
INT2NUM(MYSQL_OPT_LOCAL_INFILE)
OPT_PROTOCOL =
INT2NUM(MYSQL_OPT_PROTOCOL)
SHARED_MEMORY_BASE_NAME =
INT2NUM(MYSQL_SHARED_MEMORY_BASE_NAME)
OPT_READ_TIMEOUT =
INT2NUM(MYSQL_OPT_READ_TIMEOUT)
OPT_WRITE_TIMEOUT =
INT2NUM(MYSQL_OPT_WRITE_TIMEOUT)
SECURE_AUTH =
INT2NUM(MYSQL_SECURE_AUTH)
OPT_GUESS_CONNECTION =
INT2NUM(MYSQL_OPT_GUESS_CONNECTION)
OPT_USE_EMBEDDED_CONNECTION =
INT2NUM(MYSQL_OPT_USE_EMBEDDED_CONNECTION)
OPT_USE_REMOTE_CONNECTION =
INT2NUM(MYSQL_OPT_USE_REMOTE_CONNECTION)
SET_CLIENT_IP =
INT2NUM(MYSQL_SET_CLIENT_IP)
REFRESH_GRANT =
INT2NUM(REFRESH_GRANT)
REFRESH_LOG =
INT2NUM(REFRESH_LOG)
REFRESH_TABLES =
INT2NUM(REFRESH_TABLES)
REFRESH_HOSTS =
INT2NUM(REFRESH_HOSTS)
REFRESH_STATUS =
INT2NUM(REFRESH_STATUS)
REFRESH_THREADS =
INT2NUM(REFRESH_THREADS)
REFRESH_SLAVE =
INT2NUM(REFRESH_SLAVE)
REFRESH_MASTER =
INT2NUM(REFRESH_MASTER)
CLIENT_FOUND_ROWS =
INT2NUM(CLIENT_FOUND_ROWS)
CLIENT_NO_SCHEMA =
INT2NUM(CLIENT_NO_SCHEMA)
CLIENT_COMPRESS =
INT2NUM(CLIENT_COMPRESS)
CLIENT_ODBC =
INT2NUM(CLIENT_ODBC)
CLIENT_LOCAL_FILES =
INT2NUM(CLIENT_LOCAL_FILES)
CLIENT_IGNORE_SPACE =
INT2NUM(CLIENT_IGNORE_SPACE)
CLIENT_CHANGE_USER =
INT2NUM(CLIENT_CHANGE_USER)
CLIENT_INTERACTIVE =
INT2NUM(CLIENT_INTERACTIVE)
CLIENT_SSL =
INT2NUM(CLIENT_SSL)
CLIENT_IGNORE_SIGPIPE =
INT2NUM(CLIENT_IGNORE_SIGPIPE)
CLIENT_TRANSACTIONS =
INT2NUM(CLIENT_TRANSACTIONS)
CLIENT_MULTI_STATEMENTS =
INT2NUM(CLIENT_MULTI_STATEMENTS)
CLIENT_MULTI_RESULTS =
INT2NUM(CLIENT_MULTI_RESULTS)
OPTION_MULTI_STATEMENTS_ON =
INT2NUM(MYSQL_OPTION_MULTI_STATEMENTS_ON)
OPTION_MULTI_STATEMENTS_OFF =
INT2NUM(MYSQL_OPTION_MULTI_STATEMENTS_OFF)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ Object

initialize()



434
435
436
437
# File 'ext/mysql.c', line 434

static VALUE initialize(int argc, VALUE* argv, VALUE obj)
{
    return obj;
}

Class Method Details

.client_infoObject

client_info()



299
300
301
302
# File 'ext/mysql.c', line 299

static VALUE client_info(VALUE klass)
{
    return rb_tainted_str_new2(mysql_get_client_info());
}

.client_versionObject

client_version()



315
316
317
318
# File 'ext/mysql.c', line 315

static VALUE client_version(VALUE obj)
{
    return INT2NUM(mysql_get_client_version());
}

.connect(*args) ⇒ Object

real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil)



237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
# File 'ext/mysql.c', line 237

static VALUE real_connect(int argc, VALUE* argv, VALUE klass)
{
    VALUE host, user, passwd, db, port, sock, flag;
    char *h, *u, *p, *d, *s;
    unsigned int pp, f;
    struct mysql* myp;
    VALUE obj;

#if MYSQL_VERSION_ID >= 32200
    rb_scan_args(argc, argv, "07", &host, &user, &passwd, &db, &port, &sock, &flag);
    d = NILorSTRING(db);
    f = NILorINT(flag);
#elif MYSQL_VERSION_ID >= 32115
    rb_scan_args(argc, argv, "06", &host, &user, &passwd, &port, &sock, &flag);
    f = NILorINT(flag);
#else
    rb_scan_args(argc, argv, "05", &host, &user, &passwd, &port, &sock);
#endif
    h = NILorSTRING(host);
    u = NILorSTRING(user);
    p = NILorSTRING(passwd);
    pp = NILorINT(port);
    s = NILorSTRING(sock);

    obj = Data_Make_Struct(klass, struct mysql, 0, free_mysql, myp);
#if MYSQL_VERSION_ID >= 32200
    mysql_init(&myp->handler);
    if (mysql_real_connect(&myp->handler, h, u, p, d, pp, s, f) == NULL)
#elif MYSQL_VERSION_ID >= 32115
    if (mysql_real_connect(&myp->handler, h, u, p, pp, s, f) == NULL)
#else
    if (mysql_real_connect(&myp->handler, h, u, p, pp, s) == NULL)
#endif
  mysql_raise(&myp->handler);

    myp->handler.reconnect = 0;
    myp->connection = Qtrue;

    my_bool was_blocking;

    vio_blocking(myp->handler.net.vio, 0, &was_blocking);    
    myp->blocking = vio_is_blocking( myp->handler.net.vio );

    vio_fastsend( myp->handler.net.vio );

    myp->query_with_result = Qtrue;
    rb_obj_call_init(obj, argc, argv);

    return obj;
}

.debug(str) ⇒ Object

my_debug(string)



306
307
308
309
310
# File 'ext/mysql.c', line 306

static VALUE my_debug(VALUE obj, VALUE str)
{
    mysql_debug(StringValuePtr(str));
    return obj;
}

.escape_string(str) ⇒ Object

escape_string(string)



289
290
291
292
293
294
295
296
# File 'ext/mysql.c', line 289

static VALUE escape_string(VALUE klass, VALUE str)
{
    VALUE ret;
    Check_Type(str, T_STRING);
    ret = rb_str_new(0, (RSTRING_LEN(str))*2+1);
    rb_str_set_len(ret, mysql_escape_string(RSTRING_PTR(ret), RSTRING_PTR(str), RSTRING_LEN(str)));
    return ret;
}

.get_client_infoObject

client_info()



299
300
301
302
# File 'ext/mysql.c', line 299

static VALUE client_info(VALUE klass)
{
    return rb_tainted_str_new2(mysql_get_client_info());
}

.get_client_versionObject

client_version()



315
316
317
318
# File 'ext/mysql.c', line 315

static VALUE client_version(VALUE obj)
{
    return INT2NUM(mysql_get_client_version());
}

.initObject

init()



223
224
225
226
227
228
229
230
231
232
233
234
# File 'ext/mysql.c', line 223

static VALUE init(VALUE klass)
{
    struct mysql* myp;
    VALUE obj;

    obj = Data_Make_Struct(klass, struct mysql, 0, free_mysql, myp);
    mysql_init(&myp->handler);
    myp->connection = Qfalse;
    myp->query_with_result = Qtrue;
    rb_obj_call_init(obj, 0, NULL);
    return obj;
}

.new(*args) ⇒ Object

real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil)



237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
# File 'ext/mysql.c', line 237

static VALUE real_connect(int argc, VALUE* argv, VALUE klass)
{
    VALUE host, user, passwd, db, port, sock, flag;
    char *h, *u, *p, *d, *s;
    unsigned int pp, f;
    struct mysql* myp;
    VALUE obj;

#if MYSQL_VERSION_ID >= 32200
    rb_scan_args(argc, argv, "07", &host, &user, &passwd, &db, &port, &sock, &flag);
    d = NILorSTRING(db);
    f = NILorINT(flag);
#elif MYSQL_VERSION_ID >= 32115
    rb_scan_args(argc, argv, "06", &host, &user, &passwd, &port, &sock, &flag);
    f = NILorINT(flag);
#else
    rb_scan_args(argc, argv, "05", &host, &user, &passwd, &port, &sock);
#endif
    h = NILorSTRING(host);
    u = NILorSTRING(user);
    p = NILorSTRING(passwd);
    pp = NILorINT(port);
    s = NILorSTRING(sock);

    obj = Data_Make_Struct(klass, struct mysql, 0, free_mysql, myp);
#if MYSQL_VERSION_ID >= 32200
    mysql_init(&myp->handler);
    if (mysql_real_connect(&myp->handler, h, u, p, d, pp, s, f) == NULL)
#elif MYSQL_VERSION_ID >= 32115
    if (mysql_real_connect(&myp->handler, h, u, p, pp, s, f) == NULL)
#else
    if (mysql_real_connect(&myp->handler, h, u, p, pp, s) == NULL)
#endif
  mysql_raise(&myp->handler);

    myp->handler.reconnect = 0;
    myp->connection = Qtrue;

    my_bool was_blocking;

    vio_blocking(myp->handler.net.vio, 0, &was_blocking);    
    myp->blocking = vio_is_blocking( myp->handler.net.vio );

    vio_fastsend( myp->handler.net.vio );

    myp->query_with_result = Qtrue;
    rb_obj_call_init(obj, argc, argv);

    return obj;
}

.quote(str) ⇒ Object

escape_string(string)



289
290
291
292
293
294
295
296
# File 'ext/mysql.c', line 289

static VALUE escape_string(VALUE klass, VALUE str)
{
    VALUE ret;
    Check_Type(str, T_STRING);
    ret = rb_str_new(0, (RSTRING_LEN(str))*2+1);
    rb_str_set_len(ret, mysql_escape_string(RSTRING_PTR(ret), RSTRING_PTR(str), RSTRING_LEN(str)));
    return ret;
}

.real_connect(*args) ⇒ Object

real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil)



237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
# File 'ext/mysql.c', line 237

static VALUE real_connect(int argc, VALUE* argv, VALUE klass)
{
    VALUE host, user, passwd, db, port, sock, flag;
    char *h, *u, *p, *d, *s;
    unsigned int pp, f;
    struct mysql* myp;
    VALUE obj;

#if MYSQL_VERSION_ID >= 32200
    rb_scan_args(argc, argv, "07", &host, &user, &passwd, &db, &port, &sock, &flag);
    d = NILorSTRING(db);
    f = NILorINT(flag);
#elif MYSQL_VERSION_ID >= 32115
    rb_scan_args(argc, argv, "06", &host, &user, &passwd, &port, &sock, &flag);
    f = NILorINT(flag);
#else
    rb_scan_args(argc, argv, "05", &host, &user, &passwd, &port, &sock);
#endif
    h = NILorSTRING(host);
    u = NILorSTRING(user);
    p = NILorSTRING(passwd);
    pp = NILorINT(port);
    s = NILorSTRING(sock);

    obj = Data_Make_Struct(klass, struct mysql, 0, free_mysql, myp);
#if MYSQL_VERSION_ID >= 32200
    mysql_init(&myp->handler);
    if (mysql_real_connect(&myp->handler, h, u, p, d, pp, s, f) == NULL)
#elif MYSQL_VERSION_ID >= 32115
    if (mysql_real_connect(&myp->handler, h, u, p, pp, s, f) == NULL)
#else
    if (mysql_real_connect(&myp->handler, h, u, p, pp, s) == NULL)
#endif
  mysql_raise(&myp->handler);

    myp->handler.reconnect = 0;
    myp->connection = Qtrue;

    my_bool was_blocking;

    vio_blocking(myp->handler.net.vio, 0, &was_blocking);    
    myp->blocking = vio_is_blocking( myp->handler.net.vio );

    vio_fastsend( myp->handler.net.vio );

    myp->query_with_result = Qtrue;
    rb_obj_call_init(obj, argc, argv);

    return obj;
}

Instance Method Details

#affected_rowsObject

affected_rows()



440
441
442
443
# File 'ext/mysql.c', line 440

static VALUE affected_rows(VALUE obj)
{
    return INT2NUM(mysql_affected_rows(GetHandler(obj)));
}

#autocommit(mode) ⇒ Object

autocommit()



925
926
927
928
929
930
931
932
933
# File 'ext/mysql.c', line 925

static VALUE autocommit(VALUE obj, VALUE mode)
{
    MYSQL* m = GetHandler(obj);
    int f;
    f = (mode == Qnil || mode == Qfalse || (rb_type(mode) == T_FIXNUM && NUM2INT(mode) == 0)) ? 0 : 1;
    if (mysql_autocommit(m, f) != 0)
        mysql_raise(m);
    return obj;
}

#blocking?Boolean

blocking

Returns:

  • (Boolean)


812
813
814
# File 'ext/mysql.c', line 812

static VALUE blocking(VALUE obj){
  return ( GetMysqlStruct(obj)->blocking ? Qtrue : Qfalse );
}

#c_async_query(*args) ⇒ Object

async_query(sql,timeout=nil)



880
881
882
883
884
885
886
887
888
889
890
891
# File 'ext/mysql.c', line 880

static VALUE async_query(int argc, VALUE* argv, VALUE obj)
{
  VALUE sql, timeout;

  rb_scan_args(argc, argv, "11", &sql, &timeout);

  send_query(obj,sql);

  schedule(obj, timeout);

  return get_result(obj);
}

#change_user(*args) ⇒ Object

change_user(user=nil, passwd=nil, db=nil)



447
448
449
450
451
452
453
454
455
456
457
458
459
# File 'ext/mysql.c', line 447

static VALUE change_user(int argc, VALUE* argv, VALUE obj)
{
    VALUE user, passwd, db;
    char *u, *p, *d;
    MYSQL* m = GetHandler(obj);
    rb_scan_args(argc, argv, "03", &user, &passwd, &db);
    u = NILorSTRING(user);
    p = NILorSTRING(passwd);
    d = NILorSTRING(db);
    if (mysql_change_user(m, u, p, d) != 0)
  mysql_raise(m);
    return obj;
}

#character_set_nameObject

character_set_name()



464
465
466
467
# File 'ext/mysql.c', line 464

static VALUE character_set_name(VALUE obj)
{
    return rb_tainted_str_new2(mysql_character_set_name(GetHandler(obj)));
}

#client_infoObject

client_info()



299
300
301
302
# File 'ext/mysql.c', line 299

static VALUE client_info(VALUE klass)
{
    return rb_tainted_str_new2(mysql_get_client_info());
}

#client_versionObject

client_version()



315
316
317
318
# File 'ext/mysql.c', line 315

static VALUE client_version(VALUE obj)
{
    return INT2NUM(mysql_get_client_version());
}

#closeObject

close()



471
472
473
474
475
476
477
# File 'ext/mysql.c', line 471

static VALUE my_close(VALUE obj)
{
    MYSQL* m = GetHandler(obj);
    mysql_close(m);
    GetMysqlStruct(obj)->connection = Qfalse;
    return obj;
}

#commitObject

commit()



907
908
909
910
911
912
913
# File 'ext/mysql.c', line 907

static VALUE commit(VALUE obj)
{
    MYSQL* m = GetHandler(obj);
    if (mysql_commit(m) != 0)
        mysql_raise(m);
    return obj;
}

#connect(*args) ⇒ Object

real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil)



327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
# File 'ext/mysql.c', line 327

static VALUE real_connect2(int argc, VALUE* argv, VALUE obj)
{
    VALUE host, user, passwd, db, port, sock, flag;
    char *h, *u, *p, *d, *s;
    unsigned int pp, f;
    MYSQL* m = GetHandler(obj);
    rb_scan_args(argc, argv, "07", &host, &user, &passwd, &db, &port, &sock, &flag);
    d = NILorSTRING(db);
    f = NILorINT(flag);
    h = NILorSTRING(host);
    u = NILorSTRING(user);
    p = NILorSTRING(passwd);
    pp = NILorINT(port);
    s = NILorSTRING(sock);

    if (mysql_real_connect(m, h, u, p, d, pp, s, f) == NULL)
  mysql_raise(m);
    m->reconnect = 0;
    GetMysqlStruct(obj)->connection = Qtrue;

    return obj;
}

#create_db(db) ⇒ Object

create_db(db)



481
482
483
484
485
486
487
# File 'ext/mysql.c', line 481

static VALUE create_db(VALUE obj, VALUE db)
{
    MYSQL* m = GetHandler(obj);
    if (mysql_create_db(m, StringValuePtr(db)) != 0)
  mysql_raise(m);
    return obj;
}

#drop_db(db) ⇒ Object

drop_db(db)



490
491
492
493
494
495
496
# File 'ext/mysql.c', line 490

static VALUE drop_db(VALUE obj, VALUE db)
{
    MYSQL* m = GetHandler(obj);
    if (mysql_drop_db(m, StringValuePtr(db)) != 0)
  mysql_raise(m);
    return obj;
}

#dump_debug_infoObject

dump_debug_info()



501
502
503
504
505
506
507
# File 'ext/mysql.c', line 501

static VALUE dump_debug_info(VALUE obj)
{
    MYSQL* m = GetHandler(obj);
    if (mysql_dump_debug_info(m) != 0)
  mysql_raise(m);
    return obj;
}

#errnoObject

errno()



511
512
513
514
# File 'ext/mysql.c', line 511

static VALUE my_errno(VALUE obj)
{
    return INT2NUM(mysql_errno(GetHandler(obj)));
}

#errorObject

error()



517
518
519
520
# File 'ext/mysql.c', line 517

static VALUE my_error(VALUE obj)
{
    return rb_str_new2(mysql_error(GetHandler(obj)));
}

#escape_string(str) ⇒ Object

escape_string(string)



422
423
424
425
426
427
428
429
430
# File 'ext/mysql.c', line 422

static VALUE real_escape_string(VALUE obj, VALUE str)
{
    MYSQL* m = GetHandler(obj);
    VALUE ret;
    Check_Type(str, T_STRING);
    ret = rb_str_new(0, (RSTRING_LEN(str))*2+1);
    rb_str_set_len(ret, mysql_real_escape_string(m, RSTRING_PTR(ret), RSTRING_PTR(str), RSTRING_LEN(str)));
    return ret;
}

#field_countObject

field_count()



523
524
525
526
# File 'ext/mysql.c', line 523

static VALUE field_count(VALUE obj)
{
    return INT2NUM(mysql_field_count(GetHandler(obj)));
}

#get_client_infoObject

client_info()



299
300
301
302
# File 'ext/mysql.c', line 299

static VALUE client_info(VALUE klass)
{
    return rb_tainted_str_new2(mysql_get_client_info());
}

#get_client_versionObject

client_version()



315
316
317
318
# File 'ext/mysql.c', line 315

static VALUE client_version(VALUE obj)
{
    return INT2NUM(mysql_get_client_version());
}

#get_host_infoObject

host_info()



529
530
531
532
# File 'ext/mysql.c', line 529

static VALUE host_info(VALUE obj)
{
    return rb_tainted_str_new2(mysql_get_host_info(GetHandler(obj)));
}

#get_proto_infoObject

proto_info()



535
536
537
538
# File 'ext/mysql.c', line 535

static VALUE proto_info(VALUE obj)
{
    return INT2NUM(mysql_get_proto_info(GetHandler(obj)));
}

#get_resultObject

get_result



847
848
849
850
851
852
853
854
855
856
857
858
859
860
# File 'ext/mysql.c', line 847

static VALUE get_result(VALUE obj)
{
    MYSQL* m = GetHandler(obj);
    if (GetMysqlStruct(obj)->connection == Qfalse) {
        rb_raise(eMysql, "query: not connected");
    }
    if (mysql_read_query_result(m) != 0)
        mysql_raise(m);
    if (GetMysqlStruct(obj)->query_with_result == Qfalse)
        return obj;
    if (mysql_field_count(m) == 0)
        return Qnil;
    return store_result(obj);
}

#get_server_infoObject

server_info()



541
542
543
544
# File 'ext/mysql.c', line 541

static VALUE server_info(VALUE obj)
{
    return rb_tainted_str_new2(mysql_get_server_info(GetHandler(obj)));
}

#get_server_versionObject

server_version()



895
896
897
898
# File 'ext/mysql.c', line 895

static VALUE server_version(VALUE obj)
{
    return INT2NUM(mysql_get_server_version(GetHandler(obj)));
}

#host_infoObject

host_info()



529
530
531
532
# File 'ext/mysql.c', line 529

static VALUE host_info(VALUE obj)
{
    return rb_tainted_str_new2(mysql_get_host_info(GetHandler(obj)));
}

#infoObject

info()



547
548
549
550
551
# File 'ext/mysql.c', line 547

static VALUE info(VALUE obj)
{
    const char* p = mysql_info(GetHandler(obj));
    return p? rb_tainted_str_new2(p): Qnil;
}

#insert_idObject

insert_id()



554
555
556
557
# File 'ext/mysql.c', line 554

static VALUE insert_id(VALUE obj)
{
    return INT2NUM(mysql_insert_id(GetHandler(obj)));
}

#kill(pid) ⇒ Object

kill(pid)



560
561
562
563
564
565
566
567
# File 'ext/mysql.c', line 560

static VALUE my_kill(VALUE obj, VALUE pid)
{
    int p = NUM2INT(pid);
    MYSQL* m = GetHandler(obj);
    if (mysql_kill(m, p) != 0)
  mysql_raise(m);
    return obj;
}

#list_dbs(*args) ⇒ Object

list_dbs(db=nil)



570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
# File 'ext/mysql.c', line 570

static VALUE list_dbs(int argc, VALUE* argv, VALUE obj)
{
    unsigned int i, n;
    VALUE db, ret;
    MYSQL* m = GetHandler(obj);
    MYSQL_RES* res;

    rb_scan_args(argc, argv, "01", &db);
    res = mysql_list_dbs(m, NILorSTRING(db));
    if (res == NULL)
  mysql_raise(m);

    n = mysql_num_rows(res);
    ret = rb_ary_new2(n);
    for (i=0; i<n; i++)
  rb_ary_store(ret, i, rb_tainted_str_new2(mysql_fetch_row(res)[0]));
    mysql_free_result(res);
    return ret;
}

#list_fields(*args) ⇒ Object

list_fields(table, field=nil)



591
592
593
594
595
596
597
598
599
600
601
# File 'ext/mysql.c', line 591

static VALUE list_fields(int argc, VALUE* argv, VALUE obj)
{
    VALUE table, field;
    MYSQL* m = GetHandler(obj);
    MYSQL_RES* res;
    rb_scan_args(argc, argv, "11", &table, &field);
    res = mysql_list_fields(m, StringValuePtr(table), NILorSTRING(field));
    if (res == NULL)
  mysql_raise(m);
    return mysqlres2obj(res);
}

#list_processesObject

list_processes()



604
605
606
607
608
609
610
611
# File 'ext/mysql.c', line 604

static VALUE list_processes(VALUE obj)
{
    MYSQL* m = GetHandler(obj);
    MYSQL_RES* res = mysql_list_processes(m);
    if (res == NULL)
  mysql_raise(m);
    return mysqlres2obj(res);
}

#list_tables(*args) ⇒ Object

list_tables(table=nil)



614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
# File 'ext/mysql.c', line 614

static VALUE list_tables(int argc, VALUE* argv, VALUE obj)
{
    VALUE table;
    MYSQL* m = GetHandler(obj);
    MYSQL_RES* res;
    unsigned int i, n;
    VALUE ret;

    rb_scan_args(argc, argv, "01", &table);
    res = mysql_list_tables(m, NILorSTRING(table));
    if (res == NULL)
  mysql_raise(m);

    n = mysql_num_rows(res);
    ret = rb_ary_new2(n);
    for (i=0; i<n; i++)
  rb_ary_store(ret, i, rb_tainted_str_new2(mysql_fetch_row(res)[0]));
    mysql_free_result(res);
    return ret;
}

#more_resultsObject

more_results()



956
957
958
959
960
961
962
# File 'ext/mysql.c', line 956

static VALUE more_results(VALUE obj)
{
    if (mysql_more_results(GetHandler(obj)) == 0)
  return Qfalse;
    else
  return Qtrue;
}

#more_results?Boolean

more_results()

Returns:

  • (Boolean)


956
957
958
959
960
961
962
# File 'ext/mysql.c', line 956

static VALUE more_results(VALUE obj)
{
    if (mysql_more_results(GetHandler(obj)) == 0)
  return Qfalse;
    else
  return Qtrue;
}

#next_resultObject



964
965
966
967
968
969
970
971
972
973
974
# File 'ext/mysql.c', line 964

static VALUE next_result(VALUE obj)
{
    MYSQL* m = GetHandler(obj);
    int ret;
    ret = mysql_next_result(m);
    if (ret > 0)
  mysql_raise(m);
    if (ret == 0)
  return Qtrue;
    return Qfalse;
}

#options(*args) ⇒ Object

options(opt, value=nil)



351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
# File 'ext/mysql.c', line 351

static VALUE options(int argc, VALUE* argv, VALUE obj)
{
    VALUE opt, val;
    int n;
    my_bool b;
    char* v;
    MYSQL* m = GetHandler(obj);

    rb_scan_args(argc, argv, "11", &opt, &val);
    switch(NUM2INT(opt)) {
    case MYSQL_OPT_CONNECT_TIMEOUT:
#if MYSQL_VERSION_ID >= 40100
    case MYSQL_OPT_PROTOCOL:
#endif
#if MYSQL_VERSION_ID >= 40101
    case MYSQL_OPT_READ_TIMEOUT:
    case MYSQL_OPT_WRITE_TIMEOUT:
#endif
  if (val == Qnil)
      rb_raise(rb_eArgError, "wrong # of arguments(1 for 2)");
  n = NUM2INT(val);
  v = (char*)&n;
  break;
    case MYSQL_INIT_COMMAND:
    case MYSQL_READ_DEFAULT_FILE:
    case MYSQL_READ_DEFAULT_GROUP:
#if MYSQL_VERSION_ID >= 32349
    case MYSQL_SET_CHARSET_DIR:
    case MYSQL_SET_CHARSET_NAME:
#endif
#if MYSQL_VERSION_ID >= 40100
    case MYSQL_SHARED_MEMORY_BASE_NAME:
#endif
#if MYSQL_VERSION_ID >= 40101
    case MYSQL_SET_CLIENT_IP:
#endif
  if (val == Qnil)
      rb_raise(rb_eArgError, "wrong # of arguments(1 for 2)");
  v = StringValuePtr(val);
  break;
#if MYSQL_VERSION_ID >= 40101
    case MYSQL_SECURE_AUTH:
  if (val == Qnil || val == Qfalse)
      b = 1;
  else
      b = 0;
  v = (char*)&b;
  break;
#endif
#if MYSQL_VERSION_ID >= 32349
    case MYSQL_OPT_LOCAL_INFILE:
  if (val == Qnil || val == Qfalse)
      v = NULL;
  else {
      n = 1;
      v = (char*)&n;
  }
  break;
#endif
    default:
  v = NULL;
    }

    if (mysql_options(m, NUM2INT(opt), v) != 0)
  rb_raise(eMysql, "unknown option: %d", NUM2INT(opt));
    return obj;
}

#pingObject

ping()



636
637
638
639
640
641
642
# File 'ext/mysql.c', line 636

static VALUE ping(VALUE obj)
{
    MYSQL* m = GetHandler(obj);
    if (mysql_ping(m) != 0)
  mysql_raise(m);
    return obj;
}

#prepare(query) ⇒ Object

prepare(query)



1018
1019
1020
1021
1022
1023
# File 'ext/mysql.c', line 1018

static VALUE prepare(VALUE obj, VALUE query)
{
    VALUE st;
    st = stmt_init(obj);
    return stmt_prepare(st, query);
}

#proto_infoObject

proto_info()



535
536
537
538
# File 'ext/mysql.c', line 535

static VALUE proto_info(VALUE obj)
{
    return INT2NUM(mysql_get_proto_info(GetHandler(obj)));
}

#query(sql) ⇒ Object

query(sql)



738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
# File 'ext/mysql.c', line 738

static VALUE query(VALUE obj, VALUE sql)
{
int loop = 0;
MYSQL* m = GetHandler(obj);
QueryArgs args;
int result;

Check_Type(sql, T_STRING);
if (GetMysqlStruct(obj)->connection == Qfalse) {
    rb_raise(eMysql, "query: not connected");
}
if (rb_block_given_p()) {
    #ifdef RUBY_VM
 args.m = m;
 args.data = RSTRING_PTR(sql);
 args.len = RSTRING_LEN(sql);
 result = (int) rb_thread_blocking_region(blocking_query, &args, RUBY_UBF_PROCESS, 0);
  #else
 result = mysql_real_query(m, RSTRING_PTR(sql), RSTRING_LEN(sql));
  #endif
  if (result != 0)
 mysql_raise(m);
  
  do {
 MYSQL_RES* res = mysql_store_result(m);
 if (res == NULL) {
    if (mysql_field_count(m) != 0)
  mysql_raise(m);
 } else {
    VALUE robj = mysqlres2obj(res);
    rb_ensure(rb_yield, robj, res_free, robj);
 }
#if MYSQL_VERSION_ID >= 40101
 if ((loop = mysql_next_result(m)) > 0)
      mysql_raise(m);
  } while (loop == 0);
#else
  } while (0);
#endif
  return obj;
}

#query_with_resultObject

query_with_result()



1027
1028
1029
1030
# File 'ext/mysql.c', line 1027

static VALUE query_with_result(VALUE obj)
{
    return GetMysqlStruct(obj)->query_with_result? Qtrue: Qfalse;
}

#query_with_result=(flag) ⇒ Object

query_with_result=(flag)



1033
1034
1035
1036
1037
1038
1039
# File 'ext/mysql.c', line 1033

static VALUE query_with_result_set(VALUE obj, VALUE flag)
{
    if (TYPE(flag) != T_TRUE && TYPE(flag) != T_FALSE)
        rb_raise(rb_eTypeError, "invalid type, required true or false.");
    GetMysqlStruct(obj)->query_with_result = flag;
    return flag;
}

#quote(str) ⇒ Object

escape_string(string)



422
423
424
425
426
427
428
429
430
# File 'ext/mysql.c', line 422

static VALUE real_escape_string(VALUE obj, VALUE str)
{
    MYSQL* m = GetHandler(obj);
    VALUE ret;
    Check_Type(str, T_STRING);
    ret = rb_str_new(0, (RSTRING_LEN(str))*2+1);
    rb_str_set_len(ret, mysql_real_escape_string(m, RSTRING_PTR(ret), RSTRING_PTR(str), RSTRING_LEN(str)));
    return ret;
}

#readable?(*args) ⇒ Boolean

readable(timeout=nil)

Returns:

  • (Boolean)


817
818
819
820
821
822
823
824
825
826
827
828
829
830
# File 'ext/mysql.c', line 817

static VALUE readable( int argc, VALUE* argv, VALUE obj )
{
    MYSQL* m = GetHandler(obj);

    VALUE timeout;  
    
    rb_scan_args(argc, argv, "01", &timeout);

    if ( NIL_P( timeout ) ){
      timeout = m->net.read_timeout;
    }

    return ( vio_poll_read( m->net.vio, INT2NUM(timeout) ) == 0 ? Qtrue : Qfalse );
}

#real_connect(*args) ⇒ Object

real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil)



327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
# File 'ext/mysql.c', line 327

static VALUE real_connect2(int argc, VALUE* argv, VALUE obj)
{
    VALUE host, user, passwd, db, port, sock, flag;
    char *h, *u, *p, *d, *s;
    unsigned int pp, f;
    MYSQL* m = GetHandler(obj);
    rb_scan_args(argc, argv, "07", &host, &user, &passwd, &db, &port, &sock, &flag);
    d = NILorSTRING(db);
    f = NILorINT(flag);
    h = NILorSTRING(host);
    u = NILorSTRING(user);
    p = NILorSTRING(passwd);
    pp = NILorINT(port);
    s = NILorSTRING(sock);

    if (mysql_real_connect(m, h, u, p, d, pp, s, f) == NULL)
  mysql_raise(m);
    m->reconnect = 0;
    GetMysqlStruct(obj)->connection = Qtrue;

    return obj;
}

#real_query(sql) ⇒ Object

query(sql)



738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
# File 'ext/mysql.c', line 738

static VALUE query(VALUE obj, VALUE sql)
{
int loop = 0;
MYSQL* m = GetHandler(obj);
QueryArgs args;
int result;

Check_Type(sql, T_STRING);
if (GetMysqlStruct(obj)->connection == Qfalse) {
    rb_raise(eMysql, "query: not connected");
}
if (rb_block_given_p()) {
    #ifdef RUBY_VM
 args.m = m;
 args.data = RSTRING_PTR(sql);
 args.len = RSTRING_LEN(sql);
 result = (int) rb_thread_blocking_region(blocking_query, &args, RUBY_UBF_PROCESS, 0);
  #else
 result = mysql_real_query(m, RSTRING_PTR(sql), RSTRING_LEN(sql));
  #endif
  if (result != 0)
 mysql_raise(m);
  
  do {
 MYSQL_RES* res = mysql_store_result(m);
 if (res == NULL) {
    if (mysql_field_count(m) != 0)
  mysql_raise(m);
 } else {
    VALUE robj = mysqlres2obj(res);
    rb_ensure(rb_yield, robj, res_free, robj);
 }
#if MYSQL_VERSION_ID >= 40101
 if ((loop = mysql_next_result(m)) > 0)
      mysql_raise(m);
  } while (loop == 0);
#else
  } while (0);
#endif
  return obj;
}

#reconnectObject

reconnect()



1042
1043
1044
1045
# File 'ext/mysql.c', line 1042

static VALUE reconnect(VALUE obj)
{
    return GetHandler(obj)->reconnect ? Qtrue : Qfalse;
}

#reconnect=(flag) ⇒ Object

reconnect=(flag)



1048
1049
1050
1051
1052
# File 'ext/mysql.c', line 1048

static VALUE reconnect_set(VALUE obj, VALUE flag)
{
    GetHandler(obj)->reconnect = (flag == Qnil || flag == Qfalse) ? 0 : 1;
    return flag;
}

#refresh(r) ⇒ Object

refresh®



645
646
647
648
649
650
651
# File 'ext/mysql.c', line 645

static VALUE refresh(VALUE obj, VALUE r)
{
    MYSQL* m = GetHandler(obj);
    if (mysql_refresh(m, NUM2INT(r)) != 0)
  mysql_raise(m);
    return obj;
}

#reloadObject

reload()



654
655
656
657
658
659
660
# File 'ext/mysql.c', line 654

static VALUE reload(VALUE obj)
{
    MYSQL* m = GetHandler(obj);
    if (mysql_reload(m) != 0)
  mysql_raise(m);
    return obj;
}

#rollbackObject

rollback()



916
917
918
919
920
921
922
# File 'ext/mysql.c', line 916

static VALUE rollback(VALUE obj)
{
    MYSQL* m = GetHandler(obj);
    if (mysql_rollback(m) != 0)
        mysql_raise(m);
    return obj;
}

#ruby_async_query(sql, timeout = nil) ⇒ Object

known to deadlock TODO



9
10
11
12
13
# File 'lib/mysqlplus.rb', line 9

def ruby_async_query(sql, timeout = nil) # known to deadlock TODO
  send_query(sql)
  select [ (@sockets ||= {})[socket] ||= IO.new(socket) ], nil, nil, nil
  get_result
end

#select_db(db) ⇒ Object

select_db(db)



663
664
665
666
667
668
669
# File 'ext/mysql.c', line 663

static VALUE select_db(VALUE obj, VALUE db)
{
    MYSQL* m = GetHandler(obj);
    if (mysql_select_db(m, StringValuePtr(db)) != 0)
  mysql_raise(m);
    return obj;
}

#send_query(sql) ⇒ Object

send_query(sql)



833
834
835
836
837
838
839
840
841
842
843
844
# File 'ext/mysql.c', line 833

static VALUE send_query(VALUE obj, VALUE sql)
{
    MYSQL* m = GetHandler(obj);

    Check_Type(sql, T_STRING);
    if (GetMysqlStruct(obj)->connection == Qfalse) {
        rb_raise(eMysql, "query: not connected");
    }
    if (mysql_send_query(m, RSTRING_PTR(sql), RSTRING_LEN(sql)) != 0)
        mysql_raise(m);
    return Qnil;
}

#server_infoObject

server_info()



541
542
543
544
# File 'ext/mysql.c', line 541

static VALUE server_info(VALUE obj)
{
    return rb_tainted_str_new2(mysql_get_server_info(GetHandler(obj)));
}

#server_versionObject

server_version()



895
896
897
898
# File 'ext/mysql.c', line 895

static VALUE server_version(VALUE obj)
{
    return INT2NUM(mysql_get_server_version(GetHandler(obj)));
}

#set_server_option(option) ⇒ Object

set_server_option(option)



979
980
981
982
983
984
985
# File 'ext/mysql.c', line 979

static VALUE set_server_option(VALUE obj, VALUE option)
{
    MYSQL *m = GetHandler(obj);
    if (mysql_set_server_option(m, NUM2INT(option)) != 0)
  mysql_raise(m);
    return obj;
}

#shutdown(*args) ⇒ Object

shutdown()



672
673
674
675
676
677
678
679
680
681
682
683
684
685
# File 'ext/mysql.c', line 672

static VALUE my_shutdown(int argc, VALUE* argv, VALUE obj)
{
    MYSQL* m = GetHandler(obj);
    VALUE level;

    rb_scan_args(argc, argv, "01", &level);
#if MYSQL_VERSION_ID >= 40103
    if (mysql_shutdown(m, NIL_P(level) ? SHUTDOWN_DEFAULT : NUM2INT(level)) != 0)
#else
    if (mysql_shutdown(m) != 0)
#endif
  mysql_raise(m);
    return obj;
}

#socketObject

socket



798
799
800
801
802
# File 'ext/mysql.c', line 798

static VALUE socket(VALUE obj)
{
    MYSQL* m = GetHandler(obj);
    return INT2NUM(m->net.fd);
}

#socket_typeObject

socket_type



804
805
806
807
808
809
# File 'ext/mysql.c', line 804

static VALUE socket_type(VALUE obj)
{
    MYSQL* m = GetHandler(obj);
    VALUE description = vio_description( m->net.vio );
    return (VALUE) NILorSTRING( description );
}

#sqlstateObject

sqlstate()



988
989
990
991
992
# File 'ext/mysql.c', line 988

static VALUE sqlstate(VALUE obj)
{
    MYSQL *m = GetHandler(obj);
    return rb_tainted_str_new2(mysql_sqlstate(m));
}

#ssl_set(*args) ⇒ Object

ssl_set(key=nil, cert=nil, ca=nil, capath=nil, cipher=nil)



938
939
940
941
942
943
944
945
946
947
948
949
950
951
# File 'ext/mysql.c', line 938

static VALUE ssl_set(int argc, VALUE* argv, VALUE obj)
{
    VALUE key, cert, ca, capath, cipher;
    char *s_key, *s_cert, *s_ca, *s_capath, *s_cipher;
    MYSQL* m = GetHandler(obj);
    rb_scan_args(argc, argv, "05", &key, &cert, &ca, &capath, &cipher);
    s_key = NILorSTRING(key);
    s_cert = NILorSTRING(cert);
    s_ca = NILorSTRING(ca);
    s_capath = NILorSTRING(capath);
    s_cipher = NILorSTRING(cipher);
    mysql_ssl_set(m, s_key, s_cert, s_ca, s_capath, s_cipher);
    return obj;
}

#statObject

stat()



688
689
690
691
692
693
694
695
# File 'ext/mysql.c', line 688

static VALUE my_stat(VALUE obj)
{
    MYSQL* m = GetHandler(obj);
    const char* s = mysql_stat(m);
    if (s == NULL)
  mysql_raise(m);
    return rb_tainted_str_new2(s);
}

#stmt_initObject

stmt_init()



997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
# File 'ext/mysql.c', line 997

static VALUE stmt_init(VALUE obj)
{
    MYSQL *m = GetHandler(obj);
    MYSQL_STMT *s;
    struct mysql_stmt* stmt;
    my_bool true = 1;
    VALUE st_obj;

    if ((s = mysql_stmt_init(m)) == NULL)
  mysql_raise(m);
    if (mysql_stmt_attr_set(s, STMT_ATTR_UPDATE_MAX_LENGTH, &true))
  rb_raise(rb_eArgError, "mysql_stmt_attr_set() failed");
    st_obj = Data_Make_Struct(cMysqlStmt, struct mysql_stmt, 0, free_mysqlstmt, stmt);
    memset(stmt, 0, sizeof(*stmt));
    stmt->stmt = s;
    stmt->closed = Qfalse;
    return st_obj;
}

#store_resultObject

store_result()



698
699
700
701
702
703
704
705
# File 'ext/mysql.c', line 698

static VALUE store_result(VALUE obj)
{
    MYSQL* m = GetHandler(obj);
    MYSQL_RES* res = mysql_store_result(m);
    if (res == NULL)
  mysql_raise(m);
    return mysqlres2obj(res);
}

#thread_idObject

thread_id()



708
709
710
711
# File 'ext/mysql.c', line 708

static VALUE thread_id(VALUE obj)
{
    return INT2NUM(mysql_thread_id(GetHandler(obj)));
}

#use_resultObject

use_result()



714
715
716
717
718
719
720
721
# File 'ext/mysql.c', line 714

static VALUE use_result(VALUE obj)
{
    MYSQL* m = GetHandler(obj);
    MYSQL_RES* res = mysql_use_result(m);
    if (res == NULL)
  mysql_raise(m);
    return mysqlres2obj(res);
}

#warning_countObject

warning_count()



901
902
903
904
# File 'ext/mysql.c', line 901

static VALUE warning_count(VALUE obj)
{
    return INT2NUM(mysql_warning_count(GetHandler(obj)));
}