Changeset: bca1d72201a7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/bca1d72201a7
Added Files:
        sql/server/rel_file_loader.c
        sql/server/rel_file_loader.h
Modified Files:
        sql/backends/monet5/vaults/parquet/parquet.c
        sql/server/CMakeLists.txt
        sql/server/rel_select.c
Branch: parquet
Log Message:

example callbacks..


diffs (201 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
@@ -1,11 +1,9 @@
 #include "parquet.h"
-
-#include <stdio.h>
-
 #include <parquet-glib/parquet-glib.h>
 #include <parquet-glib/arrow-file-reader.h>
 #include <arrow-glib/arrow-glib.h>
 #include <parquet-glib/metadata.h>
+#include <rel_file_loader.h>
 
 
 extern void *GDKmalloc(size_t size); /* FIXME */
@@ -14,7 +12,7 @@ parquet_file *open_file(char* filename) 
     GParquetArrowFileReader *reader;
     GError *g_error;
     char* error = NULL;
-  
+
     reader = gparquet_arrow_file_reader_new_path(filename, &g_error);
 
     if(!reader) {
@@ -46,3 +44,25 @@ parquet_table_metadata get_table_metadat
 
     return metadata;
 }
+
+static int
+parquet_add_types(sql_subfunc *f, char *filename)
+{
+       (void)f;
+       (void)filename;
+       return 0;
+}
+
+static int
+parquet_load(sql_subfunc *f, char *filename)
+{
+       (void)f;
+       (void)filename;
+       return 0;
+}
+
+void
+parquet_init(void)
+{
+       fl_register("parquet", &parquet_add_types, &parquet_load);
+}
diff --git a/sql/server/CMakeLists.txt b/sql/server/CMakeLists.txt
--- a/sql/server/CMakeLists.txt
+++ b/sql/server/CMakeLists.txt
@@ -59,6 +59,7 @@ target_sources(sqlserver
   rel_psm.c
   rel_xml.c
   rel_dump.c
+  rel_file_loader.c
   rel_dump.h rel_exp.h rel_rel.h
   rel_basetable.h
   rel_rewriter.h
@@ -88,6 +89,7 @@ target_sources(sqlserver
   sql_symbol.h
   sql_tokens.h
   sql_partition.h
+  rel_file_loader.h
   ${BISON_sqlparser_OUTPUT_HEADER}
   ${BISON_sqlparser_OUTPUT_SOURCE}
   PUBLIC
diff --git a/sql/server/rel_file_loader.c b/sql/server/rel_file_loader.c
new file mode 100644
--- /dev/null
+++ b/sql/server/rel_file_loader.c
@@ -0,0 +1,39 @@
+
+#include "monetdb_config.h"
+#include "rel_file_loader.h"
+
+#define NR_FILE_LOADERS 255
+static file_loader_t file_loaders[NR_FILE_LOADERS] = { 0 };
+
+void
+fl_exit(void)
+{
+       for (int i = 0; i<NR_FILE_LOADERS; i++) {
+               if (file_loaders[i].name)
+                       GDKfree(file_loaders[i].name);
+       }
+}
+
+int
+fl_register(char *name, fl_add_types_fptr add_types, fl_load_fptr load)
+{
+       for (int i = 0; i<NR_FILE_LOADERS; i++) {
+               if (file_loaders[i].name == NULL) {
+                       file_loaders[i].name = GDKstrdup(name);
+                       file_loaders[i].add_types = add_types;
+                       file_loaders[i].load = load;
+                       return 0;
+               }
+       }
+       return -1;
+}
+
+file_loader_t*
+fl_find(char *name)
+{
+       for (int i = 0; i<NR_FILE_LOADERS; i++) {
+               if (file_loaders[i].name && strcmp(file_loaders[i].name, name) 
== 0)
+                       return file_loaders+i;
+       }
+       return NULL;
+}
diff --git a/sql/server/rel_file_loader.h b/sql/server/rel_file_loader.h
new file mode 100644
--- /dev/null
+++ b/sql/server/rel_file_loader.h
@@ -0,0 +1,29 @@
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0.  If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 1997 - July 2008 CWI, August 2008 - 2022 MonetDB B.V.
+ */
+
+#ifndef _REL_FILE_LOADER_H_
+#define _REL_FILE_LOADER_H_
+
+#include "sql_types.h"
+
+/* TODO think of set of file names */
+typedef int (*fl_add_types_fptr)(sql_subfunc *f, char *filename);
+typedef int (*fl_load_fptr)(sql_subfunc *f, char *filename);
+
+typedef struct file_loader_t {
+       char *name;
+       fl_add_types_fptr add_types;
+       fl_load_fptr load;
+} file_loader_t;
+
+extern int fl_register(char *name, fl_add_types_fptr add_types, fl_load_fptr 
fl_load);
+extern file_loader_t* fl_find(char *name);
+
+extern void fl_exit(void);
+
+#endif /*_REL_FILE_LOADER_H_*/
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -23,8 +23,7 @@
 #include "rel_schema.h"
 #include "rel_unnest.h"
 #include "rel_sequence.h"
-
-#include "../backends/monet5/vaults/parquet/parquet.h"
+#include "rel_file_loader.h"
 
 #define VALUE_FUNC(f) (f->func->type == F_FUNC || f->func->type == F_FILT)
 #define check_card(card,f) ((card == card_none && !f->res) || 
(CARD_VALUE(card) && f->res && VALUE_FUNC(f)) || card == card_loader || (card 
== card_relation && f->func->type == F_UNION))
@@ -547,13 +546,23 @@ file_loader_add_table_column_types(sql_s
        (void)sa;
        (void)e;
 
-       parquet_file *file = open_file(filename);
-
-       if(file->error) {
-               return file->error;
-       }
-
-       get_table_metadata(file);
+       file_loader_t *fl = fl_find(ext);
+       /* TODO add errors on missing file loader */
+       if (fl) {
+                fl->add_types(f, filename); /* TODO check for errors */
+                return NULL;
+       }
+
+       /* below stuff needs to be in the parquet backend code */
+//#include "../backends/monet5/vaults/parquet/parquet.h"
+
+//     parquet_file *file = open_file(filename);
+
+//     if(file->error) {
+//             return file->error;
+//     }
+
+//     get_table_metadata(file);
 
        /* ext -> call back */
        /*
@@ -569,7 +578,7 @@ file_loader_add_table_column_types(sql_s
        f->res = types;
        */
 
-       GDKfree(file);
+//     GDKfree(file);
 
        return NULL;
 }
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to