Changeset: 6991eda27da9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6991eda27da9
Modified Files:
sql/backends/monet5/vaults/parquet/parquet.c
sql/backends/monet5/vaults/parquet/parquet.h
sql/server/rel_file_loader.h
Branch: parquet
Log Message:
first check if the file exists
First we have to check ourselves if the file exists. We cannot rely on parquet
to do it. Because if the parquet library tries to read it, and the file doesn't
exists, it segfaults.
diffs (135 lines):
diff --git a/sql/backends/monet5/vaults/parquet/parquet.c
b/sql/backends/monet5/vaults/parquet/parquet.c
--- a/sql/backends/monet5/vaults/parquet/parquet.c
+++ b/sql/backends/monet5/vaults/parquet/parquet.c
@@ -13,30 +13,32 @@
#include "mal_parser.h"
#include "mal_builder.h"
#include "mal_namespace.h"
+#include "mal_exception.h"
#include "mal_debugger.h"
#include "mal_linker.h"
#include "mal_utils.h"
#include "sql_types.h"
+#include <unistd.h>
+
static parquet_file *
parquet_open_file(char* filename)
{
GParquetArrowFileReader *reader;
- GError *g_error;
- char* error = NULL;
-
- reader = gparquet_arrow_file_reader_new_path(filename, &g_error);
-
- if(!reader) {
- reader = NULL;
- error = g_error->message;
- }
+ GError *g_error = NULL;
parquet_file *file = GDKmalloc(sizeof(parquet_file));
+ if (access(filename, F_OK) != 0) {
+ reader = NULL;
+ }
+ else {
+ reader = gparquet_arrow_file_reader_new_path(filename, &g_error);
+ }
+
file->filename = filename;
file->reader = reader;
- file->error = error;
+ file->error = g_error;
return file;
}
@@ -161,38 +163,33 @@ static char* parquet_type_map(GArrowType
return "not implemented";
}
-static int
+static str
parquet_add_types(mvc *sql, sql_subfunc *f, char *filename)
{
- (void)f;
- (void)filename;
+ parquet_file *file = parquet_open_file(filename);
- parquet_file *file = parquet_open_file(filename);
-
- if(file->error) {
- //return file->error;
- return -1;
+ if(file->reader == NULL) {
+ throw(SQL, SQLSTATE(42000), "parquet" RUNTIME_FILE_NOT_FOUND);
}
- GError *table_error;
- GArrowTable *table = gparquet_arrow_file_reader_read_table(file->reader,
&table_error);
+ GError *table_error;
+ GArrowTable *table = gparquet_arrow_file_reader_read_table(file->reader,
&table_error);
- if(table_error) {
- printf("%s", table_error->message);
- return -1;
- }
+ if(table_error) {
+ throw(SQL, SQLSTATE(42000), "parquet" RUNTIME_LOAD_ERROR); // TODO:
different error.
+ }
- guint n_columns = garrow_table_get_n_columns(table);
+ guint n_columns = garrow_table_get_n_columns(table);
- list *types = sa_list(sql->sa);
+ list *types = sa_list(sql->sa);
- for(int col = 0; col < (int)n_columns; col++) {
- GArrowChunkedArray *array = garrow_table_get_column_data(table, col);
- GArrowType type = garrow_chunked_array_get_value_type(array);
- char* st = parquet_type_map(type);
+ for(int col = 0; col < (int)n_columns; col++) {
+ GArrowChunkedArray *array = garrow_table_get_column_data(table, col);
+ GArrowType type = garrow_chunked_array_get_value_type(array);
+ char* st = parquet_type_map(type);
- printf("%s", st);
- }
+ printf("%s", st);
+ }
// for each parquet column
// get type from parquet column
@@ -207,7 +204,7 @@ parquet_add_types(mvc *sql, sql_subfunc
/* close file */
GDKfree(file);
- return 0;
+ return "";
}
static int
diff --git a/sql/backends/monet5/vaults/parquet/parquet.h
b/sql/backends/monet5/vaults/parquet/parquet.h
--- a/sql/backends/monet5/vaults/parquet/parquet.h
+++ b/sql/backends/monet5/vaults/parquet/parquet.h
@@ -6,7 +6,7 @@
typedef struct parquet_file {
char* filename;
GParquetArrowFileReader *reader;
- char* error;
+ GError* error;
} parquet_file;
diff --git a/sql/server/rel_file_loader.h b/sql/server/rel_file_loader.h
--- a/sql/server/rel_file_loader.h
+++ b/sql/server/rel_file_loader.h
@@ -13,7 +13,7 @@
#include "sql_mvc.h"
/* TODO think of set of file names */
-typedef int (*fl_add_types_fptr)(mvc *sql, sql_subfunc *f, char *filename);
+typedef str (*fl_add_types_fptr)(mvc *sql, sql_subfunc *f, char *filename);
typedef int (*fl_load_fptr)(mvc *sql, sql_subfunc *f, char *filename);
typedef struct file_loader_t {
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]