Lbug C++ API
Loading...
Searching...
No Matches
query_result.h
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4
5#include "api.h"
6#include "arrow.h"
8#include "types.h"
9#include "query_summary.h"
10
11namespace lbug {
12namespace processor {
13class FlatTuple;
14}
15namespace main {
16
17enum class QueryResultType {
18 FTABLE = 0,
19 ARROW = 1,
20};
21
26public:
32 QueryResult(QueryResultType type, std::vector<std::string> columnNames,
33 std::vector<common::LogicalType> columnTypes);
34
38 LBUG_API virtual ~QueryResult() = 0;
42 LBUG_API bool isSuccess() const;
46 LBUG_API std::string getErrorMessage() const;
50 LBUG_API size_t getNumColumns() const;
54 LBUG_API std::vector<std::string> getColumnNames() const;
58 LBUG_API std::vector<common::LogicalType> getColumnDataTypes() const;
76 LBUG_API virtual uint64_t getNumTuples() const = 0;
80 LBUG_API virtual bool hasNext() const = 0;
87 LBUG_API virtual std::shared_ptr<processor::FlatTuple> getNext() = 0;
91 LBUG_API virtual void resetIterator() = 0;
95 LBUG_API virtual std::string toString() const = 0;
103 LBUG_API std::unique_ptr<ArrowSchema> getArrowSchema() const;
107 LBUG_API virtual bool hasNextArrowChunk() = 0;
119 LBUG_API virtual std::unique_ptr<ArrowArray> getNextArrowChunk(int64_t chunkSize) = 0;
120
121 QueryResultType getType() const { return type; }
122
123 void setColumnNames(std::vector<std::string> columnNames);
124 void setColumnTypes(std::vector<common::LogicalType> columnTypes);
125
126 void addNextResult(std::unique_ptr<QueryResult> next_);
127 std::unique_ptr<QueryResult> moveNextResult();
128
129 void setQuerySummary(std::unique_ptr<QuerySummary> summary);
130
132 std::shared_ptr<common::DatabaseLifeCycleManager> dbLifeCycleManager);
133
134 static std::unique_ptr<QueryResult> getQueryResultWithError(const std::string& errorMessage);
135
136 template<class TARGET>
137 TARGET& cast() {
139 }
140 template<class TARGET>
141 const TARGET& constCast() const {
143 }
144
145protected:
148
149protected:
151 public:
153
154 explicit QueryResultIterator(QueryResult* startResult) : current(startResult) {}
155
156 void operator++() {
157 if (current) {
158 current = current->nextQueryResult.get();
159 }
160 }
161
162 bool isEnd() const { return current == nullptr; }
163
164 bool hasNextQueryResult() const { return current->nextQueryResult != nullptr; }
165
166 QueryResult* getCurrentResult() const { return current; }
167
168 private:
169 QueryResult* current;
170 };
171
173
174 bool success = true;
175
176 std::string errMsg;
177
178 std::vector<std::string> columnNames;
179
180 std::vector<common::LogicalType> columnTypes;
181
182 std::shared_ptr<processor::FlatTuple> tuple;
183
184 std::unique_ptr<QuerySummary> querySummary;
185
186 std::unique_ptr<QueryResult> nextQueryResult;
187
189
190 std::shared_ptr<common::DatabaseLifeCycleManager> dbLifeCycleManager;
191};
192
193} // namespace main
194} // namespace lbug
#define LBUG_API
Definition api.h:25
void operator++()
Definition query_result.h:156
bool hasNextQueryResult() const
Definition query_result.h:164
bool isEnd() const
Definition query_result.h:162
QueryResult * getCurrentResult() const
Definition query_result.h:166
QueryResultIterator(QueryResult *startResult)
Definition query_result.h:154
static std::unique_ptr< QueryResult > getQueryResultWithError(const std::string &errorMessage)
LBUG_API QuerySummary * getQuerySummary() const
std::unique_ptr< QuerySummary > querySummary
Definition query_result.h:184
QueryResultIterator queryResultIterator
Definition query_result.h:188
QueryResultType getType() const
Definition query_result.h:121
virtual LBUG_API uint64_t getNumTuples() const =0
void setColumnTypes(std::vector< common::LogicalType > columnTypes)
LBUG_API bool isSuccess() const
void addNextResult(std::unique_ptr< QueryResult > next_)
virtual LBUG_API void resetIterator()=0
Resets the result tuple iterator.
void validateQuerySucceed() const
virtual LBUG_API std::shared_ptr< processor::FlatTuple > getNext()=0
QueryResult(QueryResultType type, std::vector< std::string > columnNames, std::vector< common::LogicalType > columnTypes)
virtual LBUG_API std::string toString() const =0
bool success
Definition query_result.h:174
LBUG_API std::string getErrorMessage() const
LBUG_API std::vector< std::string > getColumnNames() const
virtual LBUG_API bool hasNextArrowChunk()=0
std::shared_ptr< common::DatabaseLifeCycleManager > dbLifeCycleManager
Definition query_result.h:190
std::vector< std::string > columnNames
Definition query_result.h:178
QuerySummary * getQuerySummaryUnsafe()
std::string errMsg
Definition query_result.h:176
std::vector< common::LogicalType > columnTypes
Definition query_result.h:180
void setQuerySummary(std::unique_ptr< QuerySummary > summary)
LBUG_API std::unique_ptr< ArrowSchema > getArrowSchema() const
Returns the arrow schema of the query result.
void setColumnNames(std::vector< std::string > columnNames)
LBUG_API size_t getNumColumns() const
LBUG_API QueryResult()
Used to create a QueryResult object for the failing query.
virtual LBUG_API ~QueryResult()=0
Deconstructs the QueryResult object.
std::shared_ptr< processor::FlatTuple > tuple
Definition query_result.h:182
QueryResultType type
Definition query_result.h:172
LBUG_API QueryResult * getNextQueryResult()
std::unique_ptr< QueryResult > moveNextResult()
virtual LBUG_API std::unique_ptr< ArrowArray > getNextArrowChunk(int64_t chunkSize)=0
Returns the next chunk of the query result as an arrow array.
LBUG_API bool hasNextQueryResult() const
TARGET & cast()
Definition query_result.h:137
LBUG_API std::vector< common::LogicalType > getColumnDataTypes() const
const TARGET & constCast() const
Definition query_result.h:141
std::unique_ptr< QueryResult > nextQueryResult
Definition query_result.h:186
void checkDatabaseClosedOrThrow() const
virtual LBUG_API bool hasNext() const =0
QueryResult(QueryResultType type)
void setDBLifeCycleManager(std::shared_ptr< common::DatabaseLifeCycleManager > dbLifeCycleManager)
QuerySummary stores the execution time, plan, compiling time and query options of a query.
Definition query_summary.h:25
Stores a vector of Values.
Definition flat_tuple.h:16
TO ku_dynamic_cast(FROM *old)
Definition cast.h:11
Definition bind_input.h:16
QueryResultType
Definition query_result.h:17
@ FTABLE
Definition query_result.h:18
@ ARROW
Definition query_result.h:19
Definition client_context.h:41
Definition array_utils.h:7