mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-04-26 11:48:52 +03:00
178 lines
5.6 KiB
C++
178 lines
5.6 KiB
C++
/* Copyright (C) 2014 InfiniDB, Inc.
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; version 2 of
|
|
the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
|
MA 02110-1301, USA. */
|
|
|
|
// $Id: we_dbfileop.h 4726 2013-08-07 03:38:36Z bwilkinson $
|
|
|
|
/** @file */
|
|
|
|
#pragma once
|
|
|
|
#include "we_type.h"
|
|
#include "we_fileop.h"
|
|
#include "we_blockop.h"
|
|
#include "we_cache.h"
|
|
|
|
#define EXPORT
|
|
|
|
/** Namespace WriteEngine */
|
|
namespace WriteEngine
|
|
{
|
|
// forward reference
|
|
class ChunkManager;
|
|
|
|
/** Class DbFileOp */
|
|
class DbFileOp : public FileOp
|
|
{
|
|
public:
|
|
/**
|
|
* @brief Constructor
|
|
*/
|
|
EXPORT DbFileOp();
|
|
|
|
/**
|
|
* @brief Default Destructor
|
|
*/
|
|
EXPORT ~DbFileOp() override;
|
|
|
|
EXPORT virtual int flushCache();
|
|
|
|
/**
|
|
* @brief Get an entry within a subblock
|
|
*/
|
|
EXPORT void getSubBlockEntry(unsigned char* blockBuf, const int sbid, const int entryNo, const int width,
|
|
void* pStruct);
|
|
|
|
/**
|
|
* @brief Get an entry within a subblock using block information
|
|
*/
|
|
void getSubBlockEntry(DataBlock* block, const int sbid, const int entryNo, const int width, void* pStruct)
|
|
{
|
|
getSubBlockEntry(block->data, sbid, entryNo, width, pStruct);
|
|
}
|
|
|
|
/**
|
|
* @brief Read DB file to a buffer
|
|
*/
|
|
EXPORT virtual int readDBFile(IDBDataFile* pFile, unsigned char* readBuf, const uint64_t lbid,
|
|
const bool isFbo = false);
|
|
EXPORT int readDBFile(CommBlock& cb, unsigned char* readBuf, const uint64_t lbid);
|
|
|
|
EXPORT int readDBFile(IDBDataFile* pFile, DataBlock* block, const uint64_t lbid, const bool isFbo = false);
|
|
int readDBFile(CommBlock& cb, DataBlock* block, const uint64_t lbid)
|
|
{
|
|
return readDBFile(cb, block->data, lbid);
|
|
}
|
|
|
|
/**
|
|
* @brief Get an entry within a subblock and also populate block buffer
|
|
*
|
|
*/
|
|
EXPORT int readSubBlockEntry(IDBDataFile* pFile, DataBlock* block, const uint64_t lbid, const int sbid,
|
|
const int entryNo, const int width, void* pStruct);
|
|
|
|
EXPORT int readSubBlockEntry(CommBlock& cb, DataBlock* block, const uint64_t lbid, const int sbid,
|
|
const int entryNo, const int width, void* pStruct);
|
|
|
|
/**
|
|
* @brief Set an entry within a subblock
|
|
*/
|
|
EXPORT void setSubBlockEntry(unsigned char* blockBuf, const int sbid, const int entryNo, const int width,
|
|
const void* pStruct);
|
|
|
|
/**
|
|
* @brief Set an entry within a subblock using block information
|
|
*/
|
|
void setSubBlockEntry(DataBlock* block, const int sbid, const int entryNo, const int width,
|
|
const void* pStruct)
|
|
{
|
|
block->dirty = true;
|
|
setSubBlockEntry(block->data, sbid, entryNo, width, pStruct);
|
|
}
|
|
|
|
/**
|
|
* @brief Lbid Write a buffer to a DB file
|
|
*/
|
|
EXPORT virtual int writeDBFile(IDBDataFile* pFile, const unsigned char* writeBuf, const uint64_t lbid,
|
|
const int numOfBlock = 1);
|
|
EXPORT int writeDBFile(CommBlock& cb, const unsigned char* writeBuf, const uint64_t lbid,
|
|
const int numOfBlock = 1);
|
|
|
|
/**
|
|
* @brief Write designated block(s) w/o writing to Version Buffer or cache.
|
|
*/
|
|
EXPORT int writeDBFileNoVBCache(CommBlock& cb, const unsigned char* writeBuf, const int fbo,
|
|
const int numOfBlock = 1);
|
|
EXPORT virtual int writeDBFileNoVBCache(IDBDataFile* pFile, const unsigned char* writeBuf, const int fbo,
|
|
const int numOfBlock = 1);
|
|
|
|
int writeDBFile(IDBDataFile* pFile, DataBlock* block, const uint64_t lbid)
|
|
{
|
|
block->dirty = false;
|
|
return writeDBFile(pFile, block->data, lbid);
|
|
}
|
|
int writeDBFile(CommBlock& cb, DataBlock* block, const uint64_t lbid)
|
|
{
|
|
return writeDBFile(cb, block->data, lbid);
|
|
}
|
|
|
|
EXPORT virtual int writeDBFileFbo(IDBDataFile* pFile, const unsigned char* writeBuf, const uint64_t fbo,
|
|
const int numOfBlock);
|
|
|
|
int writeDBFileNoVBCache(CommBlock& cb, DataBlock* block, const int fbo)
|
|
{
|
|
return writeDBFileNoVBCache(cb, block->data, fbo);
|
|
}
|
|
|
|
/**
|
|
* @brief Write a sub block entry directly to a DB file
|
|
*/
|
|
EXPORT int writeSubBlockEntry(IDBDataFile* pFile, DataBlock* block, const uint64_t lbid, const int sbid,
|
|
const int entryNo, const int width, void* pStruct);
|
|
|
|
EXPORT int writeSubBlockEntry(CommBlock& cb, DataBlock* block, const uint64_t lbid, const int sbid,
|
|
const int entryNo, const int width, void* pStruct);
|
|
|
|
/**
|
|
* @brief Write to version buffer
|
|
*/
|
|
EXPORT int writeVB(IDBDataFile* pFile, const OID oid, const uint64_t lbid);
|
|
|
|
EXPORT virtual int readDbBlocks(IDBDataFile* pFile, unsigned char* readBuf, uint64_t fbo, size_t n);
|
|
|
|
EXPORT virtual int restoreBlock(IDBDataFile* pFile, const unsigned char* writeBuf, uint64_t fbo);
|
|
|
|
EXPORT virtual IDBDataFile* getFilePtr(const Column& column, bool useTmpSuffix);
|
|
|
|
virtual void chunkManager(ChunkManager* ptr)
|
|
{
|
|
m_chunkManager = ptr;
|
|
}
|
|
virtual ChunkManager* chunkManager()
|
|
{
|
|
return m_chunkManager;
|
|
}
|
|
|
|
protected:
|
|
ChunkManager* m_chunkManager;
|
|
|
|
private:
|
|
};
|
|
|
|
} // namespace WriteEngine
|
|
|
|
#undef EXPORT
|