Changeset: fc341053c41e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/fc341053c41e
Added Files:
        sql/backends/monet5/vaults/json/CMakeLists.txt
        sql/backends/monet5/vaults/json/json.c
Removed Files:
        sql/test/nested/Tests/All
        sql/test/nested/Tests/simple.test
Modified Files:
        sql/backends/monet5/CMakeLists.txt
Branch: newjson
Log Message:

Starting a fresh branch named newjson


diffs (truncated from 399 to 300 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
@@ -226,6 +227,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,185 @@
+/*
+ * 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) res_exps;
+       f->tname = 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);
+       if (jt) {
+
+       }
+       JSONfree(jt);
+       sa_destroy(sa);
+       return MAL_SUCCEED;
+}
+
+
+static void *
+json_load(void *BE, sql_subfunc *f, char *filename, sql_exp *topn)
+{
+       (void) f;
+       (void) topn;
+       backend *be = BE;
+       stmt *s = stmt_none(be);
+       InstrPtr q = newStmt(be->mb, "json", "read_json");
+       q = pushStr(be->mb, q, filename);
+       pushInstruction(be->mb, q);
+       s->nr = getDestVar(q);
+       //s->nrcols = 1;
+       s->q = q;
+       //s->op4.typeval = *st;
+       //s = stmt_alias(be, s, i+1, "bla", column_name);
+       return s;
+}
+
+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;
+}
+
+static str
+JSONread_json(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       (void) cntxt; (void) mb;
+       char *msg = MAL_SUCCEED;
+       char *fname = *(str*)getArgReference(stk, pci, pci->retc);
+       allocator *sa = sa_create(NULL);
+       JSONFileHandle *jfh = json_open(fname, sa);
+       const char* json_str = NULL;
+       if (jfh) {
+               json_str = read_json_file(jfh);
+               json_close(jfh);
+       }
+       JSON *jt = JSONparse(json_str);
+       // TODO do something
+       JSONfree(jt);
+       sa_destroy(sa);
+       return msg;
+}
+
+#include "mel.h"
+
+static mel_func json_init_funcs[] = {
+       pattern("json", "prelude", JSONprelude, false, "", noargs),
+       command("json", "epilogue", JSONepilogue, false, "", noargs),
+       pattern("json", "read_json", JSONread_json, false, "Reads json file 
into table", args(1,2, batvarargany("t",0), arg("filename", str))),
+{ .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); }
+
diff --git a/sql/test/nested/Tests/All b/sql/test/nested/Tests/All
deleted file mode 100644
--- a/sql/test/nested/Tests/All
+++ /dev/null
@@ -1,1 +0,0 @@
-simple
diff --git a/sql/test/nested/Tests/simple.test 
b/sql/test/nested/Tests/simple.test
deleted file mode 100644
--- a/sql/test/nested/Tests/simple.test
+++ /dev/null
@@ -1,127 +0,0 @@
-statement ok
-create type pair AS (key varchar, value varchar)
-
-statement ok
-create table foo(p pair)
-
-statement ok
-insert into foo values (('left', 'right')), (('left', 'right'))
-
-query TT
-select p.key, p.value from foo
-----
-left
-right
-left
-right
-
-query I
-select count(*) from foo
-----
-2
-
-statement ok
-create table bar(p pair[])
-
-statement ok
-insert into bar values (array[('left', 'right'), ('left', 'right')])
-
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to