Changeset: 4b50b3378828 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4b50b3378828
Added Files:
sql/backends/monet5/vaults/json/CMakeLists.txt
sql/backends/monet5/vaults/json/json.c
Modified Files:
sql/backends/monet5/CMakeLists.txt
Branch: newjson
Log Message:
wip parsing json file
diffs (230 lines):
diff --git a/sql/backends/monet5/CMakeLists.txt
b/sql/backends/monet5/CMakeLists.txt
--- a/sql/backends/monet5/CMakeLists.txt
+++ b/sql/backends/monet5/CMakeLists.txt
@@ -187,6 +187,7 @@ target_include_directories(sql
target_link_libraries(sql
PRIVATE
monetdb_config_header
+ json
sqlstorage
sqlcommon
batstore
@@ -225,6 +226,7 @@ install(TARGETS
DESTINATION ${CMAKE_INSTALL_LIBDIR})
add_subdirectory(generator)
+add_subdirectory(vaults/json)
if(WITH_UDF)
add_subdirectory(UDF)
endif()
diff --git a/sql/backends/monet5/vaults/json/CMakeLists.txt
b/sql/backends/monet5/vaults/json/CMakeLists.txt
new file mode 100644
--- /dev/null
+++ b/sql/backends/monet5/vaults/json/CMakeLists.txt
@@ -0,0 +1,47 @@
+#[[
+# SPDX-License-Identifier: MPL-2.0
+#
+# 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 2024, 2025 MonetDB Foundation;
+# Copyright August 2008 - 2023 MonetDB B.V.;
+# Copyright 1997 - July 2008 CWI.
+#]]
+
+add_library(json OBJECT)
+#if(MONETDB_STATIC)
+# add_library(json STATIC)
+#else()
+# add_library(json SHARED)
+#endif()
+
+target_sources(json
+ PRIVATE
+ json.c)
+
+target_include_directories(json
+ PRIVATE
+ $<TARGET_PROPERTY:mal,INTERFACE_INCLUDE_DIRECTORIES>
+ $<TARGET_PROPERTY:malmodules,INTERFACE_INCLUDE_DIRECTORIES>
+ $<TARGET_PROPERTY:atoms,INTERFACE_INCLUDE_DIRECTORIES>
+ $<TARGET_PROPERTY:sql,INTERFACE_INCLUDE_DIRECTORIES>
+ $<TARGET_PROPERTY:sqlcommon,INTERFACE_INCLUDE_DIRECTORIES>
+ $<TARGET_PROPERTY:sqlserver,INTERFACE_INCLUDE_DIRECTORIES>
+ $<TARGET_PROPERTY:sqlstorage,INTERFACE_INCLUDE_DIRECTORIES>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+ $<INSTALL_INTERFACE:${INCLUDEDIR}/monetdb>)
+
+target_link_libraries(json
+ PRIVATE
+ monetdb_config_header
+ sqlinclude
+ monetdb5
+ bat
+ stream
+)
+
+set_target_properties(json
+ PROPERTIES
+ POSITION_INDEPENDENT_CODE ON)
diff --git a/sql/backends/monet5/vaults/json/json.c
b/sql/backends/monet5/vaults/json/json.c
new file mode 100644
--- /dev/null
+++ b/sql/backends/monet5/vaults/json/json.c
@@ -0,0 +1,154 @@
+/*
+ * SPDX-License-Identifier: MPL-2.0
+ *
+ * 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 2024 MonetDB Foundation;
+ * Copyright August 2008 - 2023 MonetDB B.V.;
+ * Copyright 1997 - July 2008 CWI.
+ */
+
+#include "monetdb_config.h"
+#include "rel_file_loader.h"
+#include "rel_exp.h"
+
+#include "mal_instruction.h"
+#include "mal_interpreter.h"
+#include "mal_parser.h"
+#include "mal_builder.h"
+#include "mal_namespace.h"
+#include "mal_exception.h"
+#include "mal_linker.h"
+#include "mal_backend.h"
+#include "sql_types.h"
+#include "rel_bin.h"
+#include "json.h"
+#include "mutils.h"
+
+#include <unistd.h>
+#include <glob.h>
+
+
+typedef struct JSONFileHandle {
+ allocator *sa;
+ char *filename;
+ int fd;
+ size_t size;
+} JSONFileHandle;
+
+
+static JSONFileHandle *
+json_open(const char *fname, allocator *sa)
+{
+ if (!sa)
+ return NULL;
+ int fd = open(fname, O_RDONLY);
+ if (fd < 0){
+ // TODO add relevant trace component
+ TRC_ERROR(SQL_EXECUTION, "Error opening file %s", fname);
+ return NULL;
+ }
+ struct stat stb;
+ if (MT_stat(fname, &stb) != 0) {
+ TRC_ERROR(SQL_EXECUTION, "Error stat file %s", fname);
+ close(fd);
+ return NULL;
+ }
+ JSONFileHandle *res = sa_alloc(sa, sizeof(JSONFileHandle));
+ res->sa = sa;
+ res->filename = sa_strdup(sa, fname);
+ res->fd = fd;
+ res->size = stb.st_size;
+ return res;
+}
+
+static void
+json_close(JSONFileHandle *jfh)
+{
+ if (jfh && jfh->fd)
+ close(jfh->fd);
+}
+
+
+static char *
+read_json_file(JSONFileHandle *jfh)
+{
+ char *content = NULL;
+ if (jfh) {
+ size_t length = jfh->size;
+ content = sa_zalloc(jfh->sa, length + 1);
+ if (content) {
+ read(jfh->fd, content, length);
+ content[length + 1] = '\0';
+ }
+ }
+ return content;
+}
+
+
+static str
+json_relation(mvc *sql, sql_subfunc *f, char *filename, list *res_exps, char
*tname)
+{
+ (void) sql;
+ (void) f;
+ (void) filename;
+ (void) res_exps;
+ (void) tname;
+ allocator *sa = sa_create(NULL);
+ JSONFileHandle *jfh = json_open(filename, sa);
+ const char* json_str = NULL;
+ if (jfh) {
+ json_str = read_json_file(jfh);
+ json_close(jfh);
+ }
+ JSON *jt = JSONparse(json_str);
+ (void) jt;
+ sa_destroy(sa);
+ return MAL_SUCCEED;
+}
+
+
+static void *
+json_load(void *BE, sql_subfunc *f, char *filename, sql_exp *topn)
+{
+ (void) BE;
+ (void) f;
+ (void) filename;
+ (void) topn;
+ return NULL;
+}
+
+static str
+JSONprelude(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+ (void)cntxt; (void)mb; (void)stk; (void)pci;
+
+ fl_register("json", &json_relation, &json_load);
+ return MAL_SUCCEED;
+}
+
+static str
+JSONepilogue(void *ret)
+{
+ fl_unregister("json");
+ (void)ret;
+ return MAL_SUCCEED;
+}
+
+#include "mel.h"
+
+static mel_func json_init_funcs[] = {
+ pattern("json", "prelude", JSONprelude, false, "", noargs),
+ command("json", "epilogue", JSONepilogue, false, "", noargs),
+{ .imp=NULL }
+};
+
+#ifdef _MSC_VER
+#undef read
+#pragma section(".CRT$XCU",read)
+#endif
+LIB_STARTUP_FUNC(init_json_mal)
+{ mal_module("json", NULL, json_init_funcs); }
+
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]