/* 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);
}