PreparedResultSet* MySQLConnection::Query(PreparedStatement* stmt) { MYSQL_RES *result = NULL; uint64 rowCount = 0; uint32 fieldCount = 0; if (!_Query(stmt, &result, &rowCount, &fieldCount)) return NULL; if (mysql_more_results(m_Mysql)) { mysql_next_result(m_Mysql); } return new PreparedResultSet(stmt->m_stmt->GetSTMT(), result, rowCount, fieldCount); }
QueryResult* MySQLConnection::Query(const char* sql) { MYSQL_RES* result = NULL; MYSQL_FIELD* fields = NULL; uint64 rowCount = 0; uint32 fieldCount = 0; if (!_Query(sql, &result, &fields, &rowCount, &fieldCount)) return NULL; QueryResultMysql* queryResult = new QueryResultMysql(result, fields, rowCount, fieldCount); queryResult->NextRow(); return queryResult; }
ResultSet* MySQLConnection::Query(const char* sql) { if (!sql) return NULL; MYSQL_RES *result = NULL; MYSQL_FIELD *fields = NULL; uint64 rowCount = 0; uint32 fieldCount = 0; if (!_Query(sql, &result, &fields, &rowCount, &fieldCount)) return NULL; return new ResultSet(result, fields, rowCount, fieldCount); }
QueryResult_AutoPtr DatabaseMysql::Query(const char *sql) { MYSQL_RES *result = NULL; MYSQL_FIELD *fields = NULL; uint64 rowCount = 0; uint32 fieldCount = 0; if (!_Query(sql, &result, &fields, &rowCount, &fieldCount)) return QueryResult_AutoPtr(NULL); QueryResultMysql *queryResult = new QueryResultMysql(result, fields, rowCount, fieldCount); queryResult->NextRow(); return QueryResult_AutoPtr(queryResult); }
QueryResult* PostgreSQLConnection::Query(const char* sql) { if (!mPGconn) return NULL; PGresult* result = NULL; uint64 rowCount = 0; uint32 fieldCount = 0; if (!_Query(sql, &result, &rowCount, &fieldCount)) return NULL; QueryResultPostgre* queryResult = new QueryResultPostgre(result, rowCount, fieldCount); queryResult->NextRow(); return queryResult; }
PreparedResultSet* MySqlConnection::Query(PreparedStmt* stmt) { MYSQL_RES *result = NULL; uint64 rowCount = 0; uint32 fieldCount = 0; if (!_Query(stmt, &result, &rowCount, &fieldCount)) return NULL; if (mysql_more_results(m_Mysql)) { mysql_next_result(m_Mysql); } PreparedResultSet* pResultSet = new PreparedResultSet(stmt->m_pStmt->GetMySqlStmt(), result, rowCount, fieldCount); M_CHECKIN(pResultSet); return pResultSet; }
bool MySQLConnection::_Query(const char *sql, MYSQL_RES **pResult, MYSQL_FIELD **pFields, uint64* pRowCount, uint32* pFieldCount) { if (!m_Mysql) return false; { uint32 _s = 0; if (sLog->GetSQLDriverQueryLogging()) _s = getMSTime(); if (mysql_query(m_Mysql, sql)) { uint32 lErrno = mysql_errno(m_Mysql); sLog->outSQLDriver("SQL: %s", sql); sLog->outSQLDriver("ERROR: [%u] %s", lErrno, mysql_error(m_Mysql)); if (_HandleMySQLErrno(lErrno)) // If it returns true, an error was handled successfully (i.e. reconnection) return _Query(sql, pResult, pFields, pRowCount, pFieldCount); // We try again return false; } else if (sLog->GetSQLDriverQueryLogging()) { sLog->outSQLDriver("[%u ms] SQL: %s", getMSTimeDiff(_s,getMSTime()), sql); } *pResult = mysql_store_result(m_Mysql); *pRowCount = mysql_affected_rows(m_Mysql); *pFieldCount = mysql_field_count(m_Mysql); } if (!*pResult ) return false; if (!*pRowCount) { mysql_free_result(*pResult); return false; } *pFields = mysql_fetch_fields(*pResult); return true; }
QueryResult_AutoPtr MySQLConnection::Query(const char* sql) { if (!sql) return QueryResult_AutoPtr(NULL); MYSQL_RES *result = NULL; MYSQL_FIELD *fields = NULL; uint64 rowCount = 0; uint32 fieldCount = 0; if (!_Query(sql, &result, &fields, &rowCount, &fieldCount)) return QueryResult_AutoPtr(NULL); QueryResult *queryResult = new QueryResult(result, fields, rowCount, fieldCount); queryResult->NextRow(); return QueryResult_AutoPtr(queryResult); }
bool MySQLConnection::_Query(const char *sql, MYSQL_RES **pResult, MYSQL_FIELD **pFields, uint64* pRowCount, uint32* pFieldCount) { if (!m_Mysql) return false; { uint32 _s = getMSTime(); if (mysql_query(m_Mysql, sql)) { uint32 lErrno = mysql_errno(m_Mysql); sLog->outInfo(LOG_FILTER_SQL, "SQL: %s", sql); sLog->outError(LOG_FILTER_SQL, "[%u] %s", lErrno, mysql_error(m_Mysql)); if (lErrno == ER_BAD_FIELD_ERROR || lErrno == ER_NO_SUCH_TABLE || lErrno == ER_PARSE_ERROR) sLog->outError(LOG_FILTER_SQL, "TrinityCore TRANSFERT ERROR %u : query : %s", lErrno, sql); if (_HandleMySQLErrno(lErrno)) // If it returns true, an error was handled successfully (i.e. reconnection) return _Query(sql, pResult, pFields, pRowCount, pFieldCount); // We try again return false; } else sLog->outDebug(LOG_FILTER_SQL, "[%u ms] SQL: %s", getMSTimeDiff(_s, getMSTime()), sql); *pResult = mysql_store_result(m_Mysql); *pRowCount = mysql_affected_rows(m_Mysql); *pFieldCount = mysql_field_count(m_Mysql); } if (!*pResult ) return false; if (!*pRowCount) { mysql_free_result(*pResult); return false; } *pFields = mysql_fetch_fields(*pResult); return true; }
QueryNamedResult* MySQLConnection::QueryNamed(const char *sql) { MYSQL_RES *result = NULL; MYSQL_FIELD *fields = NULL; uint64 rowCount = 0; uint32 fieldCount = 0; if(!_Query(sql,&result,&fields,&rowCount,&fieldCount)) return NULL; QueryFieldNames names(fieldCount); for (uint32 i = 0; i < fieldCount; i++) names[i] = fields[i].name; QueryResultMysql *queryResult = new QueryResultMysql(result, fields, rowCount, fieldCount); queryResult->NextRow(); return new QueryNamedResult(queryResult,names); }
unique_ptr<QueryNamedResult> MySQLConnection::namedQuery(const char* sql) { MYSQL_RES* result = nullptr; MYSQL_FIELD* fields = nullptr; UInt64 rowCount = 0; size_t fieldCount = 0; if(!_Query(sql,result,fields,rowCount,fieldCount)) return nullptr; QueryFieldNames names(fieldCount); if (fields) { for (size_t i=0; i<fieldCount; i++) names[i] = fields[i].name; } unique_ptr<QueryResult> queryResult(new QueryResultMysql(result, fields, rowCount, fieldCount)); return unique_ptr<QueryNamedResult>(new QueryNamedResult(std::move(queryResult),names)); }
QueryNamedResult* PostgreSQLConnection::QueryNamed(const char* sql) { if (!mPGconn) return NULL; PGresult* result = NULL; uint64 rowCount = 0; uint32 fieldCount = 0; if (!_Query(sql, &result, &rowCount, &fieldCount)) return NULL; QueryFieldNames names(fieldCount); for (uint32 i = 0; i < fieldCount; ++i) names[i] = PQfname(result, i); QueryResultPostgre* queryResult = new QueryResultPostgre(result, rowCount, fieldCount); queryResult->NextRow(); return new QueryNamedResult(queryResult, names); }
bool MySQLConnection::_Query(const char *sql, MYSQL_RES **pResult, MYSQL_FIELD **pFields, uint64* pRowCount, uint32* pFieldCount) { if (!m_Mysql) return false; { boost::timer _s; if (mysql_query(m_Mysql, sql)) { uint32 lErrno = mysql_errno(m_Mysql); _LOG_INFO(LOG_FILTER_SQL, "SQL: %s", sql); _LOG_ERROR(LOG_FILTER_SQL, "[%u] %s", lErrno, mysql_error(m_Mysql)); if (_HandleMySQLErrno(lErrno)) // If it returns true, an error was handled successfully (i.e. reconnection) return _Query(sql, pResult, pFields, pRowCount, pFieldCount); // We try again return false; } else _LOG_DEBUG(LOG_FILTER_SQL, "[%u ms] SQL: %s",(uint32)_s.elapsed(), sql); *pResult = mysql_store_result(m_Mysql); *pRowCount = mysql_affected_rows(m_Mysql); *pFieldCount = mysql_field_count(m_Mysql); } if (!*pResult ) return false; if (!*pRowCount) { mysql_free_result(*pResult); return false; } *pFields = mysql_fetch_fields(*pResult); return true; }
bool MySQLConnection::_Query(const char *sql, MYSQL_RES **pResult, MYSQL_FIELD **pFields, uint64* pRowCount, uint32* pFieldCount) { if (!mMysql) return 0; uint32 _s = WorldTimer::getMSTime(); if (mysql_query(mMysql, sql)) { uint32 lErrno = mysql_errno(mMysql); sLog.outErrorDb( "SQL: %s", sql); sLog.outErrorDb("[%u] %s", lErrno, mysql_error(mMysql)); if (HandleMySQLError(lErrno)) // If error is handled, just try again return _Query(sql, pResult, pFields, pRowCount, pFieldCount); return false; } else { DEBUG_FILTER_LOG(LOG_FILTER_SQL_TEXT, "[%u ms] SQL: %s", WorldTimer::getMSTimeDiff(_s,WorldTimer::getMSTime()), sql ); } *pResult = mysql_store_result(mMysql); *pRowCount = mysql_affected_rows(mMysql); *pFieldCount = mysql_field_count(mMysql); if (!*pResult ) return false; if (!*pRowCount) { mysql_free_result(*pResult); return false; } *pFields = mysql_fetch_fields(*pResult); return true; }
bool PostgreSQLConnection::execute(const char* sql) { bool qryRes = _Query(sql); if (!qryRes) return false; //eat up results if any vector<SqlException> excs; for (;;) { //can't skip result fetch, even on error, untill all are eaten try { if (_PostgreStoreResult(sql) == false) break; } catch (const SqlException& e) { excs.push_back(e); } } if (excs.size() > 0) throw excs[0]; return true; }
bool MySQLConnection::_Query(PreparedStatement* stmt, MYSQL_RES **pResult, uint64* pRowCount, uint32* pFieldCount) { if (!m_Mysql) return false; uint32 index = stmt->m_index; { MySQLPreparedStatement* m_mStmt = GetPreparedStatement(index); ASSERT(m_mStmt); // Can only be null if preparation failed, server side error or bad query m_mStmt->m_stmt = stmt; // Cross reference them for debug output stmt->m_stmt = m_mStmt; // TODO: Cleaner way stmt->BindParameters(); MYSQL_STMT* msql_STMT = m_mStmt->GetSTMT(); MYSQL_BIND* msql_BIND = m_mStmt->GetBind(); uint32 _s = 0; if (sLog->GetSQLDriverQueryLogging()) _s = getMSTime(); if (mysql_stmt_bind_param(msql_STMT, msql_BIND)) { uint32 lErrno = mysql_errno(m_Mysql); sLog->outSQLDriver("[ERROR]: PreparedStatement (id: %u, database: `%s`) error binding params: [%u] %s", index, m_connectionInfo.database.c_str(), lErrno, mysql_stmt_error(msql_STMT)); if (_HandleMySQLErrno(lErrno)) // If it returns true, an error was handled succesfuly (ie reconnection) return _Query(stmt, pResult, pRowCount, pFieldCount); // Try again m_mStmt->ClearParameters(); return false; } if (mysql_stmt_execute(msql_STMT)) { uint32 lErrno = mysql_errno(m_Mysql); sLog->outSQLDriver("[ERROR]: PreparedStatement (id: %u, database: `%s`) error executing: [%u] %s", index, m_connectionInfo.database.c_str(), lErrno, mysql_stmt_error(msql_STMT)); if (_HandleMySQLErrno(lErrno)) // If it returns true, an error was handled succesfuly (ie reconnection) return _Query(stmt, pResult, pRowCount, pFieldCount); // Try again m_mStmt->ClearParameters(); return false; } if (sLog->GetSQLDriverQueryLogging()) sLog->outSQLDriver("[%u ms] Prepared SQL: %u on database `%s`", getMSTimeDiff(_s, getMSTime()), index, m_connectionInfo.database.c_str()); m_mStmt->ClearParameters(); *pResult = mysql_stmt_result_metadata(msql_STMT); *pRowCount = mysql_stmt_num_rows(msql_STMT); *pFieldCount = mysql_stmt_field_count(msql_STMT); return true; } }
/** * @brief 查询WMI信息 * @param[in] cstrClass WMI类名 (类名对照地址 http://msdn.microsoft.com/en-us/library/dn792258(v=vs.85).aspx) * @param[in] cstrValueName WMI需查询的键值名 * @param[out] vt 返回查询到的值 返回结果类型为VARIANT * @return 成功返回TRUE,失败FALSE */ BOOL Query(const CStringA& cstrClass, const CString& cstrValueName, VARIANT& vt) { return _Query(cstrClass, cstrValueName, vt); }