ClickHouse/src/Formats/NativeWriter.h

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

48 lines
1.5 KiB
C++
Raw Normal View History

2011-08-19 19:18:15 +00:00
#pragma once
2021-10-02 07:13:14 +00:00
#include <base/types.h>
#include <DataTypes/IDataType.h>
2021-10-08 17:21:19 +00:00
#include <Core/Block.h>
2011-08-19 19:18:15 +00:00
namespace DB
{
class WriteBuffer;
class CompressedWriteBuffer;
struct IndexForNativeFormat;
2017-05-13 22:19:04 +00:00
/** Serializes the stream of blocks in their native binary format (with names and column types).
* Designed for communication between servers.
*
2017-05-13 22:19:04 +00:00
* A stream can be specified to write the index. The index contains offsets to each part of each column.
* If an `append` is made to an existing file, and you need to write the index, then specify `initial_size_of_file`.
2011-08-19 19:18:15 +00:00
*/
2021-10-08 17:21:19 +00:00
class NativeWriter
2011-08-19 19:18:15 +00:00
{
public:
/** If non-zero client_revision is specified, additional block information can be written.
*/
2021-10-08 17:21:19 +00:00
NativeWriter(
WriteBuffer & ostr_, UInt64 client_revision_, const Block & header_, bool remove_low_cardinality_ = false,
IndexForNativeFormat * index_ = nullptr, size_t initial_size_of_file_ = 0);
2011-08-19 19:18:15 +00:00
2021-10-08 17:21:19 +00:00
Block getHeader() const { return header; }
void write(const Block & block);
void flush();
2021-10-08 17:21:19 +00:00
static String getContentType() { return "application/octet-stream"; }
2015-10-29 20:38:37 +00:00
2011-08-19 19:18:15 +00:00
private:
WriteBuffer & ostr;
UInt64 client_revision;
Block header;
IndexForNativeFormat * index = nullptr;
2017-05-13 22:19:04 +00:00
size_t initial_size_of_file; /// The initial size of the data file, if `append` done. Used for the index.
/// If you need to write index, then `ostr` must be a CompressedWriteBuffer.
CompressedWriteBuffer * ostr_concrete = nullptr;
2018-12-19 17:54:46 +00:00
bool remove_low_cardinality;
2011-08-19 19:18:15 +00:00
};
}