mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-04-26 11:48:52 +03:00
127 lines
4.1 KiB
C++
127 lines
4.1 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_colbuf.h 4726 2013-08-07 03:38:36Z bwilkinson $
|
|
*
|
|
*****************************************************************************/
|
|
|
|
/** @file
|
|
* class ColumnBuffer
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <cstdio>
|
|
|
|
#include "we_type.h"
|
|
|
|
namespace WriteEngine
|
|
{
|
|
class Log;
|
|
class ColumnInfo;
|
|
|
|
/** @brief A buffer class to store data written to column files
|
|
*
|
|
* ColumnBuffer is to be used as a temporary buffer to store Column data before
|
|
* writing it out to the intended destination(currently a file stream). The
|
|
* file stream should be initialized by the client of this class
|
|
*/
|
|
class ColumnBuffer
|
|
{
|
|
public:
|
|
/** @brief default Constructor
|
|
*/
|
|
ColumnBuffer(ColumnInfo* pColInfo, Log* logger);
|
|
|
|
/** @brief default Destructor
|
|
*/
|
|
virtual ~ColumnBuffer();
|
|
|
|
/** @brief Final flushing of data and headers prior to closing the file.
|
|
* This is a no-op for uncompressed columns.
|
|
* @param bTruncFile is file to be truncated
|
|
* @return NO_ERROR or success
|
|
*/
|
|
virtual int finishFile(bool bTruncFile);
|
|
|
|
/** @brief Returns size of the buffer
|
|
*/
|
|
int getSize() const
|
|
{
|
|
return fBufSize;
|
|
}
|
|
|
|
/** @brief Reset the ColBuf to-be-compressed buffer prior to importing the
|
|
* next extent. This is a no-op for uncompressed columns.
|
|
* @param startFileOffset (output) File offset to start of active chunk
|
|
*/
|
|
virtual int resetToBeCompressedColBuf(long long& startFileOffset);
|
|
|
|
/** @brief Set the IDBDataFile* destination for the applicable col segment file.
|
|
*
|
|
* @param The destination IDBDataFile stream to which buffer data will be written
|
|
* @param Starting HWM for cFile
|
|
* @param Headers with ptr information (only applies to compressed files)
|
|
*/
|
|
virtual int setDbFile(IDBDataFile* const cFile, HWM startHwm, const char* hdrs);
|
|
|
|
/** @brief Resize the buffer, also copying the section denoted by the
|
|
* offsets to the new buffer. If offsets are -1, then the buffer is
|
|
* expanded, but no copy is performed.
|
|
*
|
|
* @param newSize The new size of the buffer
|
|
* @param startOffset The start offset in the current buffer from where the
|
|
* previous data need to be copied
|
|
* @param endOffset The end offset upto which the data should be copied to
|
|
* new buffer
|
|
*/
|
|
void resizeAndCopy(int newSize, int startOffset, int endOffset);
|
|
|
|
/** @brief Write data to buffer
|
|
*
|
|
* @param data
|
|
* @param startOffset
|
|
* @param bytes
|
|
*/
|
|
void write(const void* const data, int startOffset, int bytes) const;
|
|
|
|
/** @brief Write data to FILE
|
|
*
|
|
* @param startOffset The buffer offset from where the write should begin
|
|
* @param writeSize The number of bytes to be written to the file
|
|
* @param fillUpWEmpties The flag to fill the buffer with empty magic values
|
|
* up to the block boundary.
|
|
*/
|
|
virtual int writeToFile(int startOffset, int writeSize, bool fillUpWEmpties = false);
|
|
|
|
protected:
|
|
// Disable copy constructor and assignment operator by declaring and
|
|
// not defining.
|
|
ColumnBuffer(const ColumnBuffer&);
|
|
ColumnBuffer& operator=(const ColumnBuffer&);
|
|
|
|
unsigned char* fBuffer; // Internal buffer
|
|
int fBufSize; // Size of the internal buffer
|
|
IDBDataFile* fFile; // The column file output stream
|
|
ColumnInfo* fColInfo; // parent ColumnInfo Object
|
|
Log* fLog; // Logger
|
|
HWM fStartingHwm; // Starting HWM for current column segment file
|
|
};
|
|
|
|
} // namespace WriteEngine
|