Example #1
0
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));
}
Example #2
0
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;
}
Example #3
0
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);
}