15 #include "eckit/eckit.h"
16 #include "eckit/log/Number.h"
18 #include "eckit/sql/SQLSelect.h"
19 #include "eckit/sql/expression/SQLExpression.h"
25 using namespace eckit;
26 using namespace eckit::sql;
37 SQLSelectOutput::SQLSelectOutput(
bool manageOwnBuffer) :
43 manageOwnBuffer_(manageOwnBuffer) {}
61 s <<
"SQLSelectOutput";
100 std::ostringstream ss;
101 ss <<
"String too long for configured output: " << len <<
" > " << charSize;
102 throw SeriousBug(ss.str(), Here());
108 ::memcpy(
reinterpret_cast<char*
>(
pos_), s, len);
111 if (len < charSize) {
112 ::memset(&
reinterpret_cast<char*
>(
pos_)[len], 0, charSize-len);
126 expression::Expressions
output(sql.output());
136 for (
size_t i = 0;
i <
output.size();
i++) {
141 size_t colSizeBytes = column->type()->size();
142 ASSERT(colSizeBytes % 8 == 0);
152 metaData_[
i]->hasMissing(column->hasMissingValue());
153 metaData_[
i]->missingValue(column->missingValue());
154 metaData_[
i]->bitfieldDef(column->bitfieldDef());
163 data_.resize(offset);
static void count(void *counter, const double *data, size_t n)
virtual void outputDouble(double, bool)
virtual void outputString(const char *, size_t, bool)
std::vector< size_t > columnSizesDoubles_
How are writes carried out.
virtual void cleanup(eckit::sql::SQLSelect &)
virtual void outputUnsignedInt(double, bool)
virtual void updateTypes(eckit::sql::SQLSelect &)
void outputNumber(double)
virtual unsigned long long count()
virtual void outputInt(double, bool)
virtual void outputReal(double, bool)
virtual void print(std::ostream &) const
double * out_
Where are we writing data to (and how many elements can we write)
void resetBuffer(double *out, size_t count)
std::vector< size_t > offsets_
virtual void outputBitfield(double, bool)
unsigned long long count_
How much output have we done.
size_t requiredBufferSize_
std::vector< double > data_
Only used if managing own buffer.
virtual ~SQLSelectOutput()
virtual bool output(const eckit::sql::expression::Expressions &)
virtual void prepare(eckit::sql::SQLSelect &)
ColumnType sqlToOdbType(const SQLType &t)