mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-22 05:06:24 +00:00
feat(Core/DB): add support range loop for mysql result (#13355)
This commit is contained in:
@@ -24,6 +24,27 @@
|
||||
#include <tuple>
|
||||
#include <vector>
|
||||
|
||||
template<typename T>
|
||||
struct ResultIterator
|
||||
{
|
||||
using iterator_category = std::forward_iterator_tag;
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using value_type = T;
|
||||
using pointer = T*;
|
||||
using reference = T&;
|
||||
|
||||
explicit ResultIterator(pointer ptr) : _ptr(ptr) { }
|
||||
|
||||
reference operator*() const { return *_ptr; }
|
||||
pointer operator->() { return _ptr; }
|
||||
ResultIterator& operator++() { if (!_ptr->NextRow()) _ptr = nullptr; return *this; }
|
||||
|
||||
bool operator!=(const ResultIterator& right) { return _ptr != right._ptr; }
|
||||
|
||||
private:
|
||||
pointer _ptr;
|
||||
};
|
||||
|
||||
class AC_DATABASE_API ResultSet
|
||||
{
|
||||
public:
|
||||
@@ -54,6 +75,9 @@ public:
|
||||
return theTuple;
|
||||
}
|
||||
|
||||
auto begin() { return ResultIterator<ResultSet>(this); }
|
||||
static auto end() { return ResultIterator<ResultSet>(nullptr); }
|
||||
|
||||
protected:
|
||||
std::vector<QueryResultFieldMetadata> _fieldMetadata;
|
||||
uint64 _rowCount;
|
||||
@@ -100,6 +124,9 @@ public:
|
||||
return theTuple;
|
||||
}
|
||||
|
||||
auto begin() { return ResultIterator<PreparedResultSet>(this); }
|
||||
static auto end() { return ResultIterator<PreparedResultSet>(nullptr); }
|
||||
|
||||
protected:
|
||||
std::vector<QueryResultFieldMetadata> m_fieldMetadata;
|
||||
std::vector<Field> m_rows;
|
||||
|
||||
Reference in New Issue
Block a user