static Variant HHVM_FUNCTION(mysql_async_query_result, const Variant& link_identifier) { auto mySQL = MySQL::Get(link_identifier); if (!mySQL) { raise_warning("supplied argument is not a valid MySQL-Link resource"); return Variant(Variant::NullInit()); } MYSQL* conn = mySQL->get(); if (!conn || (conn->async_op_status != ASYNC_OP_QUERY && conn->async_op_status != ASYNC_OP_UNSET)) { raise_warning("runtime/ext_mysql: attempt to check query result when query " "not executing"); return Variant(Variant::NullInit()); } int error = 0; auto status = mysql_real_query_nonblocking( conn, mySQL->m_async_query.c_str(), mySQL->m_async_query.size(), &error); if (status != NET_ASYNC_COMPLETE) { return Variant(Variant::NullInit()); } if (error) { return Variant(Variant::NullInit()); } mySQL->m_async_query.clear(); MYSQL_RES* mysql_result = mysql_use_result(conn); auto r = makeSmartPtr<MySQLResult>(mysql_result); r->setAsyncConnection(mySQL); return Variant(std::move(r)); }
Variant f_mysql_async_query_result(CVarRef link_identifier) { MySQL* mySQL = MySQL::Get(link_identifier); if (!mySQL) { raise_warning("supplied argument is not a valid MySQL-Link resource"); return Variant(Variant::NullInit()); } MYSQL* conn = mySQL->get(); if (!conn || (conn->async_op_status != ASYNC_OP_QUERY && conn->async_op_status != ASYNC_OP_UNSET)) { raise_warning("runtime/ext_mysql: attempt to check query result when query " "not executing"); return Variant(Variant::NullInit()); } int error = 0; auto status = mysql_real_query_nonblocking( conn, mySQL->m_async_query.data(), mySQL->m_async_query.size(), &error); if (status != NET_ASYNC_COMPLETE) { return Variant(Variant::NullInit()); } if (error) { return Variant(Variant::NullInit()); } mySQL->m_async_query.reset(); MYSQL_RES* mysql_result = mysql_use_result(conn); MySQLResult *r = NEWOBJ(MySQLResult)(mysql_result); r->setAsyncConnection(mySQL); Resource ret(r); return ret; }
static PyObject* wsql_connection_query_async(wsql_connection *self, PyObject *args) { char* query; Py_ssize_t query_size; net_async_status status; int error; if (!PyArg_ParseTuple(args, "s#:query_async", &query, &query_size)) return NULL; CHECK_CONNECTION(self, NULL); status = mysql_real_query_nonblocking(&(self->connection), query, query_size, &error); if (status == NET_ASYNC_COMPLETE && error) { return wsql_raise_error(self); } return Py_BuildValue("(iO)", (int)status, Py_None); }