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