11 #include "eckit/sql/SQLColumn.h"
12 #include "eckit/exception/Exceptions.h"
30 template <
typename READER>
32 const std::vector<std::reference_wrapper<const eckit::sql::SQLColumn>>&
columns,
33 std::function<
void(eckit::sql::SQLTableIterator&)> metadataUpdateCallback) :
35 it_(const_cast<READER&>(parent_.
oda()).begin()),
36 end_(parent_.
oda().end()),
38 metadataUpdateCallback_(metadataUpdateCallback),
44 template <
typename READER>
46 it_ =
const_cast<READER&
>(parent_.oda()).begin();
47 end_ = parent_.oda().end();
51 template <
typename READER>
54 template <
typename READER>
65 if (it_ == end_)
return false;
67 if (it_->isNewDataset()) {
70 metadataUpdateCallback_(*
this);
77 template <
typename READER>
82 columnOffsets_.clear();
83 columnDoublesSizes_.clear();
84 for (
const eckit::sql::SQLColumn& col : columns_) {
87 throw eckit::UserError(
"Column \"" + col.name() +
"\" not found in table, but required in SQL request", Here());
91 columnOffsets_.push_back(it_->dataOffset(idx));
92 columnDoublesSizes_.push_back(it_->dataSizeDoubles(idx));
96 template <
typename READER>
98 ASSERT(columnOffsets_.size() == columns_.size());
99 return columnOffsets_;
102 template <
typename READER>
104 ASSERT(columnDoublesSizes_.size() == columns_.size());
105 return columnDoublesSizes_;
108 template <
typename READER>
virtual std::vector< size_t > columnOffsets() const override
virtual const double * data() const override
TODATableIterator(const TODATable< READER > &parent, const std::vector< std::reference_wrapper< const eckit::sql::SQLColumn >> &columns, std::function< void(eckit::sql::SQLTableIterator &)> metadataUpdateCallback)
virtual void rewind() override
virtual bool next() override
virtual ~TODATableIterator()
virtual std::vector< size_t > doublesDataSizes() const override