Changeset: 17377529166f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/17377529166f
Added Files:
sql/server/rel_file_loader.c
sql/server/rel_file_loader.h
Branch: default
Log Message:
add new rel_fil_loader
diffs (86 lines):
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,46 @@
+
+#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)
+{
+ file_loader_t *fl = fl_find(name);
+
+ if (fl) {
+ printf("re-registering %s\n", name);
+ GDKfree(fl->name);
+ fl->name = NULL;
+ }
+ 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,30 @@
+/*
+ * 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"
+#include "sql_mvc.h"
+
+typedef str (*fl_add_types_fptr)(mvc *sql, sql_subfunc *f, char *filename,
list *res_exps, char *name);
+typedef void *(*fl_load_fptr)(void *be, sql_subfunc *f, char *filename); /*
use void * as both return type and be are
+
unknown
types at this layer */
+
+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_*/
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]