#ifndef RAY_PARQUET_H
#define RAY_PARQUET_H
#include <rayforce.h>
typedef struct ray_parquet ray_parquet_t;
ray_t* ray_parquet_open(const char* path, ray_t* columns, int64_t batch_rows,
ray_parquet_t** out);
ray_t* ray_parquet_next(ray_parquet_t* reader);
ray_t* ray_parquet_range(ray_parquet_t* reader, int64_t column, int64_t lo, int64_t hi);
int64_t ray_parquet_groups_skipped(const ray_parquet_t* reader);
int64_t ray_parquet_pages_skipped(const ray_parquet_t* reader);
int64_t ray_parquet_bloom_skipped(const ray_parquet_t* reader);
int64_t ray_parquet_parallel_batches(const ray_parquet_t* reader);
void ray_parquet_close(ray_parquet_t* reader);
ray_t* ray_parquet_metadata(const char* path);
ray_t* ray_parquet_read(const char* path, ray_t* options);
ray_t* ray_parquet_splayed_typed(const char* path, const char* dir, ray_t* types);
ray_t* ray_parquet_parted_typed(const char* path, const char* root, const char* table, ray_t* types);
ray_t* ray_parquet_splayed(const char* path, const char* dir);
ray_t* ray_parquet_parted(const char* path, const char* root, const char* table);
bool ray_parquet_snappy(const uint8_t* src, size_t len, uint8_t* dst, size_t size);
ray_t* ray_parquet_select_source(ray_t* source, ray_t* query, bool* complete);
ray_t* ray_parquet_scan_fn(ray_t** args, int64_t n);
ray_t* ray_parquet_read_fn(ray_t** args, int64_t n);
ray_t* ray_parquet_metadata_fn(ray_t* path);
ray_t* ray_parquet_splayed_fn(ray_t** args, int64_t n);
ray_t* ray_parquet_parted_fn(ray_t** args, int64_t n);
ray_t* ray_parquet_each_fn(ray_t** args, int64_t n);
#endif