drogon
C++14/17-based HTTP application framework
Loading...
Searching...
No Matches
Result.h
Go to the documentation of this file.
1
14
15// Taken from libpqxx and modified.
16// The license for libpqxx can be found in the COPYING file.
17
18#pragma once
19
20#include <drogon/exports.h>
21#include <memory>
22#include <string>
23#include <future>
24#include <algorithm>
25#include <assert.h>
26
27namespace drogon
28{
29namespace orm
30{
33class Row;
34class ResultImpl;
35using ResultImplPtr = std::shared_ptr<ResultImpl>;
36
37enum class SqlStatus
38{
39 Ok,
40 End
41};
42
44
57class DROGON_EXPORT Result
58{
59 public:
60 explicit Result(ResultImplPtr ptr) : resultPtr_(std::move(ptr))
61 {
62 }
63
64 Result(const Result &r) noexcept = default;
65 Result(Result &&) noexcept = default;
66 Result &operator=(const Result &r) noexcept;
67 Result &operator=(Result &&) noexcept;
68 using DifferenceType = long;
69 using SizeType = size_t;
70 using Reference = Row;
71 using ConstIterator = ConstResultIterator;
72 using Iterator = ConstIterator;
73 using RowSizeType = unsigned long;
74 using FieldSizeType = unsigned long;
75
76 using ConstReverseIterator = ConstReverseResultIterator;
77 using ReverseIterator = ConstReverseIterator;
78
79 // C++ type type definition compatibility
80 using value_type = Row;
81 using size_type = SizeType;
82 using difference_type = DifferenceType;
83 using reference = Reference;
84 using const_reference = const Reference;
85 using iterator = Iterator;
86 using const_iterator = ConstIterator;
87 using reverse_iterator = ConstReverseIterator;
88 using const_reverse_iterator = ConstReverseIterator;
89
90 SizeType size() const noexcept;
91
92 SizeType capacity() const noexcept
93 {
94 return size();
95 }
96
97 ConstIterator begin() const noexcept;
98 ConstIterator cbegin() const noexcept;
99 ConstIterator end() const noexcept;
100 ConstIterator cend() const noexcept;
101
102 ConstReverseIterator rbegin() const;
103 ConstReverseIterator crbegin() const;
104 ConstReverseIterator rend() const;
105 ConstReverseIterator crend() const;
106
107 bool empty() const noexcept
108 {
109 return size() == 0;
110 }
111
112 Reference front() const noexcept;
113 Reference back() const noexcept;
114
115 Reference operator[](SizeType index) const noexcept;
116 Reference at(SizeType index) const;
117 void swap(Result &) noexcept;
118
120 RowSizeType columns() const noexcept;
121
123 const char *columnName(RowSizeType number) const;
124
127
131 SizeType affectedRows() const noexcept;
132
135
140 unsigned long long insertId() const noexcept;
141
142#ifdef _MSC_VER
143 Result() noexcept = default;
144#endif
145
146 private:
147 ResultImplPtr resultPtr_;
148
149 friend class Field;
150 friend class Row;
152 RowSizeType columnNumber(const char colName[]) const;
153
155 RowSizeType columnNumber(const std::string &name) const
156 {
157 return columnNumber(name.c_str());
158 }
159
161 int oid(RowSizeType column) const noexcept;
162
163 const char *getValue(SizeType row, RowSizeType column) const;
164 bool isNull(SizeType row, RowSizeType column) const;
165 FieldSizeType getLength(SizeType row, RowSizeType column) const;
166};
167
168inline void swap(Result &one, Result &two) noexcept
169{
170 one.swap(two);
171}
172} // namespace orm
173} // namespace drogon
174
175#ifndef _MSC_VER
176namespace std
177{
178template <>
179inline void swap(drogon::orm::Result &one, drogon::orm::Result &two) noexcept
180{
181 one.swap(two);
182}
183} // namespace std
184#endif
Definition ResultIterator.h:28
Definition ResultIterator.h:120
const char * columnName(RowSizeType number) const
Name of column with this number (throws exception if it doesn't exist).
unsigned long long insertId() const noexcept
SizeType affectedRows() const noexcept
RowSizeType columns() const noexcept
Number of columns in result.
Reference to one row in a result.
Definition Row.h:47
Drogon Test is a minimal effort test framework developed because the major C++ test frameworks doesn'...
Definition Attribute.h:23
STL namespace.