#include "storage/table/null_column.h"
#include "common/vector/value_vector.h"
#include "storage/buffer_manager/memory_manager.h"
#include "storage/compression/compression.h"
#include "storage/storage_utils.h"
using namespace lbug::common;
using namespace lbug::transaction;
namespace lbug {
namespace storage {
struct NullColumnFunc {
static void readValuesFromPageToVector(const uint8_t* frame, PageCursor& pageCursor,
ValueVector* resultVector, uint32_t posInVector, uint32_t numValuesToRead,
const CompressionMetadata& metadata) {
if (metadata.isConstant()) {
bool value = false;
ConstantCompression::decompressValues(reinterpret_cast<uint8_t*>(&value), 0 ,
1 , PhysicalTypeID::BOOL, 1 , metadata);
resultVector->setNullRange(posInVector, numValuesToRead, value);
} else {
resultVector->setNullFromBits(reinterpret_cast<const uint64_t*>(frame),
pageCursor.elemPosInPage, posInVector, numValuesToRead);
}
}
};
NullColumn::NullColumn(const std::string& name, FileHandle* dataFH, MemoryManager* mm,
ShadowFile* shadowFile, bool enableCompression)
: Column{name, LogicalType::BOOL(), dataFH, mm, shadowFile, enableCompression,
false } {
readToVectorFunc = NullColumnFunc::readValuesFromPageToVector;
}
} }