sqlite-parquet-vtable/parquet/parquet_cursor.h

74 lines
2.3 KiB
C
Raw Permalink Normal View History

#ifndef PARQUET_CURSOR_H
#define PARQUET_CURSOR_H
#include "parquet_filter.h"
#include "parquet_table.h"
#include "parquet/api/reader.h"
class ParquetCursor {
ParquetTable* table;
std::unique_ptr<parquet::ParquetFileReader> reader;
std::unique_ptr<parquet::RowGroupMetaData> rowGroupMetadata;
std::shared_ptr<parquet::RowGroupReader> rowGroup;
std::vector<std::shared_ptr<parquet::Scanner>> scanners;
std::vector<parquet::Type::type> types;
2018-03-04 22:20:28 +00:00
std::vector<parquet::LogicalType::type> logicalTypes;
std::vector<int> colRows;
std::vector<bool> colNulls;
2018-03-13 00:42:50 +00:00
std::vector<int64_t> colIntValues;
std::vector<double> colDoubleValues;
std::vector<parquet::ByteArray> colByteArrayValues;
int rowId;
int rowGroupId;
int rowGroupStartRowId;
2018-03-13 00:42:50 +00:00
int rowGroupSize;
int numRows;
int numRowGroups;
int rowsLeftInRowGroup;
2018-03-04 22:49:19 +00:00
bool nextRowGroup();
std::vector<Constraint> constraints;
2018-03-13 00:42:50 +00:00
bool currentRowSatisfiesFilter();
bool currentRowGroupSatisfiesFilter();
bool currentRowGroupSatisfiesRowIdFilter(Constraint& constraint);
bool currentRowGroupSatisfiesTextFilter(Constraint& constraint, std::shared_ptr<parquet::RowGroupStatistics> stats);
2018-03-18 19:03:08 +00:00
bool currentRowGroupSatisfiesBlobFilter(Constraint& constraint, std::shared_ptr<parquet::RowGroupStatistics> stats);
bool currentRowGroupSatisfiesIntegerFilter(Constraint& constraint, std::shared_ptr<parquet::RowGroupStatistics> stats);
bool currentRowGroupSatisfiesDoubleFilter(Constraint& constraint, std::shared_ptr<parquet::RowGroupStatistics> stats);
bool currentRowSatisfiesTextFilter(Constraint& constraint);
bool currentRowSatisfiesIntegerFilter(Constraint& constraint);
bool currentRowSatisfiesDoubleFilter(Constraint& constraint);
2018-03-13 00:42:50 +00:00
public:
ParquetCursor(ParquetTable* table);
int getRowId();
void next();
2018-03-05 02:05:26 +00:00
void close();
void reset(std::vector<Constraint> constraints);
bool eof();
void ensureColumn(int col);
bool isNull(int col);
unsigned int getNumRowGroups() const;
unsigned int getNumConstraints() const;
const Constraint& getConstraint(unsigned int i) const;
2018-03-04 01:00:50 +00:00
parquet::Type::type getPhysicalType(int col);
2018-03-04 22:20:28 +00:00
parquet::LogicalType::type getLogicalType(int col);
ParquetTable* getTable() const;
2018-03-04 01:00:50 +00:00
int getInt32(int col);
long getInt64(int col);
double getDouble(int col);
parquet::ByteArray* getByteArray(int col);
};
#endif