#include "pq-binarycolumn.h" #include "column.h" #include "dbTypes.h" #include "pq-column.h" #include #include #include #include #include PQ::BinaryColumn::BinaryColumn(const PQ::SelectBase * select, unsigned int field) : PQ::Column(select, field) { } template inline T PQ::BinaryColumn::valueAs() const { T outValue {}; std::memcpy(&outValue, value(), sizeof(T)); if constexpr (std::endian::native != std::endian::big && sizeof(T) > 1) { return std::byteswap(outValue); } return outValue; } void PQ::BinaryColumn::apply(DB::HandleField & handler) const { if (isNull()) { handler.null(); return; } switch (oid) { case CHAROID: case VARCHAROID: case TEXTOID: case XMLOID: handler.string({value(), length()}); break; case BOOLOID: handler.boolean(valueAs()); break; case INT2OID: handler.integer(valueAs()); break; case INT4OID: handler.integer(valueAs()); break; case INT8OID: handler.integer(valueAs()); break; case BYTEAOID: handler.blob(DB::Blob(value(), length())); break; default: throw DB::ColumnTypeNotSupported(); } }