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; }
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); }
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); }); }
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;} ); }
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()); } }