Report abuse


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