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]