19 #include <boost/filesystem.hpp> 20 #include "rapidjson/document.h" 48 virtual size_t read(
void* buffer,
size_t max_size) = 0;
64 virtual size_t readRegion(
void* buffer,
size_t offset,
size_t size) = 0;
86 const UserMapping* user_mapping =
nullptr) {
87 throw std::runtime_error{
"APPEND mode not yet supported for this table."};
98 virtual void serialize(rapidjson::Value& value,
99 rapidjson::Document::AllocatorType& allocator)
const = 0;
113 const rapidjson::Value& value);
120 size_t read(
void* buffer,
size_t max_size)
override {
121 size_t bytes_read = fread(buffer, 1, max_size, file_);
122 if (!scan_finished_) {
123 scan_finished_ = feof(file_);
126 total_bytes_read_ += bytes_read;
130 size_t readRegion(
void* buffer,
size_t offset,
size_t size)
override {
132 if (fseek(file_, static_cast<long int>(offset + header_offset_), SEEK_SET) != 0) {
133 throw std::runtime_error{
"An error occurred when attempting to read offset " +
135 "\". " + strerror(errno)};
137 return fread(buffer, 1, size, file_);
147 const UserMapping* user_mapping)
override;
150 rapidjson::Document::AllocatorType& allocator)
const override;
168 : current_block_(nullptr)
169 , block_chars_remaining_(0)
178 void skipToEntry(
int entry_number);
188 void consumeDataFromCurrentEntry(
size_t size,
char* dest_buffer =
nullptr);
224 const rapidjson::Value& value);
225 size_t read(
void* buffer,
size_t max_size)
override;
227 size_t readRegion(
void* buffer,
size_t offset,
size_t size)
override;
235 rapidjson::Document::AllocatorType& allocator)
const override;
245 const UserMapping* user_mapping)
override;
262 void skipBytes(
size_t n_bytes);
265 size_t readInternal(
void* buffer,
size_t read_size,
size_t buffer_size);
297 const rapidjson::Value& value);
303 size_t read(
void* buffer,
size_t max_size)
override;
305 size_t readRegion(
void* buffer,
size_t offset,
size_t size)
override;
310 rapidjson::Document::AllocatorType& allocator)
const override;
313 std::vector<std::unique_ptr<CsvReader>>
files_;
332 const rapidjson::Value& value);
336 const UserMapping* user_mapping)
override;
339 void insertFile(std::string location);
std::vector< std::string > sourcenames_
std::vector< int > archive_entry_index_
std::vector< size_t > cumulative_sizes_
import_export::CopyParams copy_params_
virtual size_t read(void *buffer, size_t max_size)=0
virtual ~CsvReader()=default
virtual void checkForMoreRows(size_t file_offset, const ForeignServer *server_options=nullptr, const UserMapping *user_mapping=nullptr)
bool isRemainingSizeKnown() override
size_t getRemainingSize() override
virtual void serialize(rapidjson::Value &value, rapidjson::Document::AllocatorType &allocator) const =0
bool isRemainingSizeKnown() override
ArchiveWrapper(const std::string &file_path)
virtual size_t readRegion(void *buffer, size_t offset, size_t size)=0
CsvReader(const std::string &file_path, const import_export::CopyParams ©_params)
size_t getRemainingSize() override
size_t currentEntryDataAvailable() const
std::unique_ptr< Archive > arch_
bool currentEntryFinished() const
const void * current_block_
bool isScanFinished() override
virtual size_t getRemainingSize()=0
std::vector< std::unique_ptr< CsvReader > > files_
virtual bool isScanFinished()=0
size_t read(void *buffer, size_t max_size) override
size_t readRegion(void *buffer, size_t offset, size_t size) override
int getCurrentEntryIndex() const
bool isScanFinished() override
bool isScanFinished() override
std::vector< std::string > file_locations_
virtual bool isRemainingSizeKnown()=0
std::vector< size_t > cumulative_sizes_
~SingleFileReader() override
size_t block_chars_remaining_