/*      query(sql)   */
static VALUE query(VALUE obj, VALUE sql)
{
    int loop = 0;
    MYSQL* m = GetHandler(obj);
    Check_Type(sql, T_STRING);
    if (GetMysqlStruct(obj)->connection == Qfalse) {
        rb_raise(eMysql, "query: not connected");
    }
    if (rb_block_given_p()) {
        if (mysql_real_query(m, RSTRING_PTR(sql), RSTRING_LEN(sql)) != 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;
    }
    if (mysql_real_query(m, RSTRING_PTR(sql), RSTRING_LEN(sql)) != 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);
}