Пример #1
0
bool ConcreteDatabase::checkConnections()
{
	const char* sql = "SELECT 1";
	auto checkFunc = [](QueryResult* res) -> bool
	{
		if (!res) return false;
		if (!res->fetchRow()) return false;
		if (res->at(0).getInt32() != 1) return false;

		return true;
	};

	//check async conn
	{
		SqlConnection& conn = getAsyncConnection();
		SqlConnection::Lock guard(conn);
		auto qry = Retry::SqlOp< unique_ptr<QueryResult> >(getLogger(),[sql](SqlConnection& c){ return c.query(sql); })(conn,"CheckAsync");
		if (!checkFunc(qry.get()))
			return false;
	}

	//check all sync conns
	for (size_t i=0; i<_queryConns.size(); i++)
	{
		SqlConnection& conn = _queryConns[i];
		SqlConnection::Lock guard(conn);
		auto qry = Retry::SqlOp< unique_ptr<QueryResult> >(getLogger(),[sql](SqlConnection& c){ return c.query(sql); })(conn,"CheckPool");
		if (!checkFunc(qry.get()))
			return false;
	}

	return true;
}
Пример #2
0
bool Database::DirectExecuteStmt(const SqlStatementID& id, SqlStmtParameters* params)
{
    MANGOS_ASSERT(params);
    std::auto_ptr<SqlStmtParameters> p(params);
    //execute statement
    SqlConnection::Lock _guard(getAsyncConnection());
    return _guard->ExecuteStmt(id.ID(), *params);
}
Пример #3
0
bool ConcreteDatabase::directExecuteStmt( const SqlStatementID& id, SqlStmtParameters& params )
{
	//execute statement
	SqlConnection& conn = getAsyncConnection();
	SqlConnection::Lock guard(conn);

	return Retry::SqlOp<bool>(getLogger(),[&](SqlConnection& c){ return c.executeStmt(id, params); })(conn,"DirectStmtExec",[&](){ return conn.getStmt(id)->getSqlString(true); });
}
Пример #4
0
bool ConcreteDatabase::directExecute( const char* sql )
{
	if(!_asyncConn)
		return false;

	SqlConnection& conn = getAsyncConnection();
	SqlConnection::Lock guard(conn);
	return Retry::SqlOp<bool>(getLogger(),[sql](SqlConnection& c){ return c.execute(sql); })(conn,"SqlExec",[sql](){return sql;} );
}
Пример #5
0
bool ConcreteDatabase::transactionCommitDirect()
{
	if (!_asyncConn)
		return false;

	//check if we have pending transaction
	if(!_transStorage->get())
		return false;

	//directly execute SqlTransaction
	{
		scoped_ptr<SqlTransaction> pTrans(_transStorage->detach());
		return pTrans->execute(getAsyncConnection());	
	}
}