#ifndef RAY_CSV_H
#define RAY_CSV_H
#include <rayforce.h>
#include "store/col.h"
typedef enum {
CSV_TYPE_UNKNOWN = 0,
CSV_TYPE_BOOL,
CSV_TYPE_I64,
CSV_TYPE_F64,
CSV_TYPE_STR,
CSV_TYPE_DATE,
CSV_TYPE_TIME,
CSV_TYPE_TIMESTAMP,
CSV_TYPE_TIMESPAN,
CSV_TYPE_GUID,
CSV_TYPE_U8,
CSV_TYPE_I16,
CSV_TYPE_I32,
CSV_TYPE_F32,
CSV_TYPE_AUTO
} csv_type_t;
#define RAY_CSV_AUTO_TAG 120
csv_type_t csv_resolve_int_width(int64_t min, int64_t max, bool has_null);
ray_t* ray_read_csv(const char* path);
ray_t* ray_read_csv_opts(const char* path, char delimiter, bool header,
const int8_t* col_types, int32_t n_types);
ray_t* ray_read_csv_named_opts(const char* path, char delimiter, bool header,
const int8_t* col_types, int32_t n_types,
const int64_t* col_names, int32_t n_names);
ray_err_t ray_csv_parted_paths(const char* root, char* dest, size_t dest_size,
char* staging, size_t staging_size);
ray_err_t ray_csv_save_parted_named_opts(const char* path, char delimiter, bool header,
const int8_t* col_types, int32_t n_types,
const int64_t* col_names, int32_t n_names,
const char* root, const char* table_name,
int64_t rows_per_part);
ray_err_t ray_csv_save_parted_mode(const char* path, char delimiter, bool header,
const int8_t* col_types, int32_t n_types,
const int64_t* col_names, int32_t n_names,
const char* root, const char* table_name,
int64_t rows_per_part, ray_compress_t mode);
ray_err_t ray_csv_save_splayed_named_opts(const char* path, char delimiter, bool header,
const int8_t* col_types, int32_t n_types,
const int64_t* col_names, int32_t n_names,
const char* dir, int64_t rows_per_chunk);
ray_err_t ray_csv_save_splayed_mode(const char* path, char delimiter, bool header,
const int8_t* col_types, int32_t n_types,
const int64_t* col_names, int32_t n_names,
const char* dir, int64_t rows_per_chunk, ray_compress_t mode);
ray_err_t ray_write_csv(ray_t* table, const char* path);
#endif