| VERSION | = | INT2FIX(MYSQL_RUBY_VERSION) | Mysql constant | |
| 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) |
/* client_info() */
static VALUE client_info(VALUE klass)
{
return rb_tainted_str_new2(mysql_get_client_info());
}
/* client_version() */
static VALUE client_version(VALUE obj)
{
return INT2NUM(mysql_get_client_version());
}
real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil)
/* real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil) */
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;
myp->query_with_result = Qtrue;
rb_obj_call_init(obj, argc, argv);
return obj;
}
my_debug(string)
/* my_debug(string) */
static VALUE my_debug(VALUE obj, VALUE str)
{
mysql_debug(StringValuePtr(str));
return obj;
}
escape_string(string)
/* escape_string(string) */
static VALUE escape_string(VALUE klass, VALUE str)
{
VALUE ret;
Check_Type(str, T_STRING);
ret = rb_str_new(0, (RSTRING(str)->len)*2+1);
RSTRING(ret)->len = mysql_escape_string(RSTRING(ret)->ptr, RSTRING(str)->ptr, RSTRING(str)->len);
return ret;
}
/* client_info() */
static VALUE client_info(VALUE klass)
{
return rb_tainted_str_new2(mysql_get_client_info());
}
/* client_version() */
static VALUE client_version(VALUE obj)
{
return INT2NUM(mysql_get_client_version());
}
init()
/* init() */
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;
}
initialize()
/* initialize() */
static VALUE initialize(int argc, VALUE* argv, VALUE obj)
{
return obj;
}
real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil)
/* real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil) */
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;
myp->query_with_result = Qtrue;
rb_obj_call_init(obj, argc, argv);
return obj;
}
escape_string(string)
/* escape_string(string) */
static VALUE escape_string(VALUE klass, VALUE str)
{
VALUE ret;
Check_Type(str, T_STRING);
ret = rb_str_new(0, (RSTRING(str)->len)*2+1);
RSTRING(ret)->len = mysql_escape_string(RSTRING(ret)->ptr, RSTRING(str)->ptr, RSTRING(str)->len);
return ret;
}
real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil)
/* real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil) */
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;
myp->query_with_result = Qtrue;
rb_obj_call_init(obj, argc, argv);
return obj;
}
/* affected_rows() */
static VALUE affected_rows(VALUE obj)
{
return INT2NUM(mysql_affected_rows(GetHandler(obj)));
}
autocommit()
/* autocommit() */
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;
}
change_user(user=nil, passwd=nil, db=nil)
/* change_user(user=nil, passwd=nil, db=nil) */
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_name() */
static VALUE character_set_name(VALUE obj)
{
return rb_tainted_str_new2(mysql_character_set_name(GetHandler(obj)));
}
/* client_info() */
static VALUE client_info(VALUE klass)
{
return rb_tainted_str_new2(mysql_get_client_info());
}
/* client_version() */
static VALUE client_version(VALUE obj)
{
return INT2NUM(mysql_get_client_version());
}
close()
/* close() */
static VALUE my_close(VALUE obj)
{
MYSQL* m = GetHandler(obj);
mysql_close(m);
if (mysql_errno(m))
mysql_raise(m);
GetMysqlStruct(obj)->connection = Qfalse;
return obj;
}
commit()
/* commit() */
static VALUE commit(VALUE obj)
{
MYSQL* m = GetHandler(obj);
if (mysql_commit(m) != 0)
mysql_raise(m);
return obj;
}
real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil)
/* real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil) */
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;
}
/* dump_debug_info() */
static VALUE dump_debug_info(VALUE obj)
{
MYSQL* m = GetHandler(obj);
if (mysql_dump_debug_info(m) != 0)
mysql_raise(m);
return obj;
}
errno()
/* errno() */
static VALUE my_errno(VALUE obj)
{
return INT2NUM(mysql_errno(GetHandler(obj)));
}
error()
/* error() */
static VALUE my_error(VALUE obj)
{
return rb_str_new2(mysql_error(GetHandler(obj)));
}
escape_string(string)
/* escape_string(string) */
static VALUE escape_string(VALUE klass, VALUE str)
{
VALUE ret;
Check_Type(str, T_STRING);
ret = rb_str_new(0, (RSTRING(str)->len)*2+1);
RSTRING(ret)->len = mysql_escape_string(RSTRING(ret)->ptr, RSTRING(str)->ptr, RSTRING(str)->len);
return ret;
}
real_escape_string(string)
/* real_escape_string(string) */
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(str)->len)*2+1);
RSTRING(ret)->len = mysql_real_escape_string(m, RSTRING(ret)->ptr, RSTRING(str)->ptr, RSTRING(str)->len);
return ret;
}
/* field_count() */
static VALUE field_count(VALUE obj)
{
return INT2NUM(mysql_field_count(GetHandler(obj)));
}
/* client_info() */
static VALUE client_info(VALUE klass)
{
return rb_tainted_str_new2(mysql_get_client_info());
}
/* client_version() */
static VALUE client_version(VALUE obj)
{
return INT2NUM(mysql_get_client_version());
}
/* proto_info() */
static VALUE proto_info(VALUE obj)
{
return INT2NUM(mysql_get_proto_info(GetHandler(obj)));
}
/* server_info() */
static VALUE server_info(VALUE obj)
{
return rb_tainted_str_new2(mysql_get_server_info(GetHandler(obj)));
}
/* server_version() */
static VALUE server_version(VALUE obj)
{
return INT2NUM(mysql_get_server_version(GetHandler(obj)));
}
info()
/* info() */
static VALUE info(VALUE obj)
{
const char* p = mysql_info(GetHandler(obj));
return p? rb_tainted_str_new2(p): Qnil;
}
kill(pid)
/* kill(pid) */
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(db=nil)
/* list_dbs(db=nil) */
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(table, field=nil)
/* list_fields(table, field=nil) */
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_processes() */
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(table=nil)
/* list_tables(table=nil) */
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_results() */
static VALUE more_results(VALUE obj)
{
if (mysql_more_results(GetHandler(obj)) == 0)
return Qfalse;
else
return Qtrue;
}
/* more_results() */
static VALUE more_results(VALUE obj)
{
if (mysql_more_results(GetHandler(obj)) == 0)
return Qfalse;
else
return Qtrue;
}
options(opt, value=nil)
/* options(opt, value=nil) */
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;
}
ping()
/* ping() */
static VALUE ping(VALUE obj)
{
MYSQL* m = GetHandler(obj);
if (mysql_ping(m) != 0)
mysql_raise(m);
return obj;
}
prepare(query)
/* prepare(query) */
static VALUE prepare(VALUE obj, VALUE query)
{
VALUE st;
st = stmt_init(obj);
return stmt_prepare(st, query);
}
/* proto_info() */
static VALUE proto_info(VALUE obj)
{
return INT2NUM(mysql_get_proto_info(GetHandler(obj)));
}
query(sql)
/* query(sql) */
static VALUE query(VALUE obj, VALUE sql)
{
MYSQL* m = GetHandler(obj);
Check_Type(sql, T_STRING);
if (rb_block_given_p()) {
#if MYSQL_VERSION_ID >= 40101
if (mysql_get_server_version(m) >= 40101 && mysql_set_server_option(m, MYSQL_OPTION_MULTI_STATEMENTS_ON) != 0)
mysql_raise(m);
#endif
if (mysql_real_query(m, RSTRING(sql)->ptr, RSTRING(sql)->len) != 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
while (mysql_next_result(m) == 0);
#else
while (0);
#endif
return obj;
}
if (mysql_real_query(m, RSTRING(sql)->ptr, RSTRING(sql)->len) != 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);
}
/* query_with_result() */
static VALUE query_with_result(VALUE obj)
{
return GetMysqlStruct(obj)->query_with_result? Qtrue: Qfalse;
}
query_with_result=(flag)
/* query_with_result=(flag) */
static VALUE query_with_result_set(VALUE obj, VALUE flag)
{
if (TYPE(flag) != T_TRUE && TYPE(flag) != T_FALSE)
#if RUBY_VERSION_CODE < 160
TypeError("invalid type, required true or false.");
#else
rb_raise(rb_eTypeError, "invalid type, required true or false.");
#endif
GetMysqlStruct(obj)->query_with_result = flag;
return flag;
}
real_escape_string(string)
/* real_escape_string(string) */
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(str)->len)*2+1);
RSTRING(ret)->len = mysql_real_escape_string(m, RSTRING(ret)->ptr, RSTRING(str)->ptr, RSTRING(str)->len);
return ret;
}
escape_string(string)
/* escape_string(string) */
static VALUE escape_string(VALUE klass, VALUE str)
{
VALUE ret;
Check_Type(str, T_STRING);
ret = rb_str_new(0, (RSTRING(str)->len)*2+1);
RSTRING(ret)->len = mysql_escape_string(RSTRING(ret)->ptr, RSTRING(str)->ptr, RSTRING(str)->len);
return ret;
}
real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil)
/* real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil) */
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;
}
query(sql)
/* query(sql) */
static VALUE query(VALUE obj, VALUE sql)
{
MYSQL* m = GetHandler(obj);
Check_Type(sql, T_STRING);
if (rb_block_given_p()) {
#if MYSQL_VERSION_ID >= 40101
if (mysql_get_server_version(m) >= 40101 && mysql_set_server_option(m, MYSQL_OPTION_MULTI_STATEMENTS_ON) != 0)
mysql_raise(m);
#endif
if (mysql_real_query(m, RSTRING(sql)->ptr, RSTRING(sql)->len) != 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
while (mysql_next_result(m) == 0);
#else
while (0);
#endif
return obj;
}
if (mysql_real_query(m, RSTRING(sql)->ptr, RSTRING(sql)->len) != 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);
}
reconnect()
/* reconnect() */
static VALUE reconnect(VALUE obj)
{
return GetHandler(obj)->reconnect ? Qtrue : Qfalse;
}
reconnect=(flag)
/* reconnect=(flag) */
static VALUE reconnect_set(VALUE obj, VALUE flag)
{
GetHandler(obj)->reconnect = (flag == Qnil || flag == Qfalse) ? 0 : 1;
return flag;
}
refresh®
/* refresh(r) */
static VALUE refresh(VALUE obj, VALUE r)
{
MYSQL* m = GetHandler(obj);
if (mysql_refresh(m, NUM2INT(r)) != 0)
mysql_raise(m);
return obj;
}
reload()
/* reload() */
static VALUE reload(VALUE obj)
{
MYSQL* m = GetHandler(obj);
if (mysql_reload(m) != 0)
mysql_raise(m);
return obj;
}
rollback()
/* rollback() */
static VALUE rollback(VALUE obj)
{
MYSQL* m = GetHandler(obj);
if (mysql_rollback(m) != 0)
mysql_raise(m);
return obj;
}
/* server_info() */
static VALUE server_info(VALUE obj)
{
return rb_tainted_str_new2(mysql_get_server_info(GetHandler(obj)));
}
/* server_version() */
static VALUE server_version(VALUE obj)
{
return INT2NUM(mysql_get_server_version(GetHandler(obj)));
}
set_server_option(option)
/* set_server_option(option) */
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()
/* shutdown() */
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;
}
sqlstate()
/* sqlstate() */
static VALUE sqlstate(VALUE obj)
{
MYSQL *m = GetHandler(obj);
return rb_tainted_str_new2(mysql_sqlstate(m));
}
ssl_set(key=nil, cert=nil, ca=nil, capath=nil, cipher=nil)
/* ssl_set(key=nil, cert=nil, ca=nil, capath=nil, cipher=nil) */
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;
}
stat()
/* stat() */
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_init() */
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_result() */
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);
}
/* use_result() */
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);
}