mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-30 11:32:03 +00:00
d36f52502e
It's still hackish and dirty, but server and client compies. Server starts, but throwes meaningless exception on any query. Client seems to be working fine. Linux compilation might (but shouldn't) be broken (not tested).
51 lines
1.3 KiB
C++
51 lines
1.3 KiB
C++
#pragma once
|
||
|
||
#include <string>
|
||
#include <fcntl.h>
|
||
|
||
#include <DB/IO/ReadBuffer.h>
|
||
#include <DB/IO/BufferWithOwnMemory.h>
|
||
|
||
#ifdef __APPLE__
|
||
#include <common/apple_rt.h>
|
||
#endif
|
||
|
||
namespace DB
|
||
{
|
||
|
||
class ReadBufferFromFileBase : public BufferWithOwnMemory<ReadBuffer>
|
||
{
|
||
public:
|
||
ReadBufferFromFileBase(size_t buf_size, char * existing_memory, size_t alignment);
|
||
virtual ~ReadBufferFromFileBase();
|
||
off_t seek(off_t off, int whence = SEEK_SET);
|
||
virtual off_t getPositionInFile() = 0;
|
||
virtual std::string getFileName() const = 0;
|
||
virtual int getFD() const = 0;
|
||
|
||
/// Есть возможность получать информацию о времени каждого чтения.
|
||
struct ProfileInfo
|
||
{
|
||
size_t bytes_requested;
|
||
size_t bytes_read;
|
||
size_t nanoseconds;
|
||
};
|
||
|
||
using ProfileCallback = std::function<void(ProfileInfo)>;
|
||
|
||
/// CLOCK_MONOTONIC_COARSE более чем достаточно для отслеживания долгих чтений - например, залипаний на секунды.
|
||
void setProfileCallback(const ProfileCallback & profile_callback_, clockid_t clock_type_ = CLOCK_MONOTONIC_COARSE)
|
||
{
|
||
profile_callback = profile_callback_;
|
||
clock_type = clock_type_;
|
||
}
|
||
|
||
protected:
|
||
ProfileCallback profile_callback;
|
||
clockid_t clock_type;
|
||
|
||
virtual off_t doSeek(off_t off, int whence) = 0;
|
||
};
|
||
|
||
}
|