19 #include <boost/any.hpp>
20 #include <boost/optional.hpp>
21 #include <boost/enable_shared_from_this.hpp>
23 #include "hazelcast/util/export.h"
24 #include "hazelcast/client/sql/sql_column_type.h"
25 #include "hazelcast/client/sql/sql_row_metadata.h"
26 #include "hazelcast/client/serialization/serialization.h"
44 using column = std::vector<boost::any>;
45 struct HAZELCAST_API page_data;
51 sql_row(
size_t row_index, std::shared_ptr<page_data> page);
71 boost::optional<T>
get_object(std::size_t column_index)
const
73 check_index(column_index);
75 return page_data_->get_column_value<T>(column_index, row_index_);
100 boost::optional<T>
get_object(
const std::string& column_name)
const
102 auto column_index = resolve_index(column_name);
103 return page_data_->get_column_value<T>(column_index, row_index_);
116 std::size_t row_index_;
117 std::shared_ptr<page_data> page_data_;
119 std::size_t resolve_index(
const std::string& column_name)
const;
121 void check_index(
size_t index)
const;
132 sql_page(std::vector<sql_column_type> column_types,
133 std::vector<column> columns,
135 std::shared_ptr<sql_row_metadata> row_metadata =
nullptr);
141 const std::vector<sql_column_type>& column_types()
const;
153 std::size_t column_count()
const;
159 std::size_t row_count()
const;
165 const std::vector<sql_row>& rows()
const;
169 friend class protocol::codec::builtin::sql_page_codec;
171 std::shared_ptr<page_data> page_data_;
172 std::vector<sql_row> rows_;
179 void row_metadata(std::shared_ptr<sql_row_metadata> row_metadata);
185 void serialization_service(serialization::pimpl::SerializationService* ss);
187 void construct_rows();
189 struct HAZELCAST_API page_data
191 std::vector<sql_column_type> column_types_;
192 std::vector<column> columns_;
193 std::shared_ptr<sql_row_metadata> row_metadata_;
194 serialization::pimpl::SerializationService* serialization_service_;
197 boost::optional<T> get_column_value(std::size_t column_index,
198 std::size_t row_index)
const
200 assert(column_index < column_count());
201 assert(row_index < row_count());
203 auto& any_value = columns_[column_index][row_index];
204 if (any_value.empty()) {
208 if (column_types_[column_index] != sql_column_type::object) {
209 return boost::any_cast<T>(any_value);
214 return serialization_service_->to_object<T>(
215 boost::any_cast<serialization::pimpl::data>(any_value));
218 std::size_t column_count()
const;
219 std::size_t row_count()
const;
boost::optional< T > get_object(std::size_t column_index) const
Gets the value of the column by index.
boost::optional< T > get_object(const std::string &column_name) const
Gets the value of the column by column name.
A finite set of rows returned to the client.