Changeset: 191743cf6f37 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/191743cf6f37
Branch: newjson
Log Message:

merge nested


diffs (truncated from 302 to 300 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1403,7 +1403,6 @@ str RAstatementEnd(Client cntxt, MalBlkP
 str SQLautocommit(mvc *m);
 void SQLdestroyResult(res_table *destroy);
 void SQLengine(Client c);
-str SQLengineIntern(Client c, backend *be);
 str SQLengine_(Client c);
 str SQLescapeString(str s);
 str SQLexitClient(Client c);
@@ -1767,7 +1766,6 @@ stream *socket_wstream(SOCKET socket, co
 stream *stderr_wastream(void);
 stream *stdin_rastream(void);
 stream *stdout_wastream(void);
-stream *stream_blackhole_create(void);
 stream *stream_fwf_create(stream *restrict s, size_t num_fields, size_t 
*restrict widths, char filler);
 stream *xz_stream(stream *inner, int preset);
 
diff --git a/common/stream/CMakeLists.txt b/common/stream/CMakeLists.txt
--- a/common/stream/CMakeLists.txt
+++ b/common/stream/CMakeLists.txt
@@ -39,7 +39,6 @@ target_sources(stream
   mapi_stream.c
   memio.c
   callback.c
-  blackhole.c
   fwf.c
   text_stream.c
   $<$<BOOL:${OPENSSL_FOUND}>:openssl_stream.c>
diff --git a/common/stream/blackhole.c b/common/stream/blackhole.c
deleted file mode 100644
--- a/common/stream/blackhole.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.
- */
-
-#include "monetdb_config.h"
-#include "stream.h"
-#include "stream_internal.h"
-
-
-
-static ssize_t
-stream_blackhole_write(stream *restrict s, const void *restrict buf, size_t 
elmsize, size_t cnt)
-{
-       (void) s;
-       (void) buf;
-       (void) elmsize;
-       return (ssize_t) cnt;
-}
-
-static void
-stream_blackhole_close(stream *s)
-{
-       (void) s;
-       /* no resources to close */
-}
-
-stream *
-stream_blackhole_create(void)
-{
-       stream *s;
-       if ((s = create_stream("blackhole")) == NULL) {
-               return NULL;
-       }
-
-       s->read = NULL;
-       s->write = stream_blackhole_write;
-       s->close = stream_blackhole_close;
-       s->flush = NULL;
-       s->readonly = false;
-       return s;
-}
diff --git a/common/stream/stream.h b/common/stream/stream.h
--- a/common/stream/stream.h
+++ b/common/stream/stream.h
@@ -269,8 +269,6 @@ stream_export stream *callback_stream(
        void (*destroy)(void *priv),
        const char *restrict name); // used in mclient.c, for readline
 
-stream_export stream *stream_blackhole_create(void); // never used
-
 stream_export stream *stream_fwf_create(stream *restrict s, size_t num_fields, 
size_t *restrict widths, char filler); // sql.c
 
 stream_export stream *create_text_stream(stream *s);
diff --git a/monetdb5/modules/atoms/json.h b/monetdb5/modules/atoms/json.h
--- a/monetdb5/modules/atoms/json.h
+++ b/monetdb5/modules/atoms/json.h
@@ -46,7 +46,7 @@ typedef struct JSON {
        int free;
 } JSON;
 
-extern JSON *JSONparse(const char *j);
-extern void JSONfree(JSON *jt);
+mal_export JSON *JSONparse(const char *j);
+mal_export void JSONfree(JSON *jt);
 
 #endif /* __JSON_H__ */
diff --git a/sql/backends/monet5/mal_backend.h 
b/sql/backends/monet5/mal_backend.h
--- a/sql/backends/monet5/mal_backend.h
+++ b/sql/backends/monet5/mal_backend.h
@@ -51,7 +51,6 @@ typedef struct backend {
 
        int     mvc_var;        /* current variable holding the latest query 
context (used to create dependencies in mal statements) */
        int     rowcount;       /* when multiple insert/update/delete/truncate 
statements are present, use an accumulator to hold the total number of rows 
affected */
-       int             vtop;                   /* top of the variable stack 
before the current function */
        int     join_idx;       /* number of index joins (used in rel_bin) */
        lng     reloptimizer;   /* timer for optimizer phase */
 
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -2478,6 +2478,8 @@ rel2bin_basetable(backend *be, sql_rel *
                } else {
                        sql_column *c = find_sql_column(t, oname);
 
+                       if (c->type.multiset || c->type.type->composite)
+                               continue;
                        fcol = c;
                        col = stmt_col(be, c, multiset?dels:NULL, 
dels->partition);
                }
@@ -2512,6 +2514,8 @@ rel2bin_basetable(backend *be, sql_rel *
                                dels = odels;
                                c = find_sql_column(t, oname);
                        }
+                       if (!c->type.multiset && c->type.type->composite)
+                               continue;
 
                        s = (c == fcol) ? col : stmt_col(be, c, 
multiset?dels:NULL, dels->partition);
                        if (c->type.multiset) {
@@ -4872,6 +4876,9 @@ rel2bin_project(backend *be, sql_rel *re
                return NULL;
        for (en = rel->exps->h; en; en = en->next) {
                sql_exp *exp = en->data;
+               sql_subtype *st = exp_subtype(exp);
+               if (st && st->type->composite)
+                       continue;
                int oldvtop = be->mb->vtop, oldstop = be->mb->stop;
                stmt *s = exp_bin(be, exp, sub, NULL /*psub*/, NULL, NULL, 
NULL, NULL, 0, 0, 0);
 
diff --git a/sql/backends/monet5/sql_execute.c 
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -539,13 +539,9 @@ SQLstatementIntern(Client c, const char 
                        if (!output)
                                sql->out = NULL;        /* no output stream */
                        be->depth++;
-                       msg = SQLrun(c,m);
+                       msg = SQLrun(c, m);
                        be->depth--;
-                       if (c->curprg->def->stop > 1) {
-                               assert(0);
-                               MSresetInstructions(c->curprg->def, oldstop);
-                               freeVariables(c, c->curprg->def, NULL, oldvtop);
-                       }
+                       assert (c->curprg->def->stop <= 1);
                        sqlcleanup(sql, 0);
                        if (!execute)
                                goto endofcompile;
@@ -603,38 +599,6 @@ endofcompile:
        return msg;
 }
 
-str
-SQLengineIntern(Client c, backend *be)
-{
-       str msg = MAL_SUCCEED;
-       //char oldlang = be->language;
-       mvc *m = be->mvc;
-
-       assert (m->emode != m_deallocate && m->emode != m_prepare);
-       assert (c->curprg->def->stop > 2);
-
-       //be->language = 'D';
-       if (MALcommentsOnly(c->curprg->def))
-               msg = MAL_SUCCEED;
-       else
-               msg = SQLrun(c,m);
-
-       if (m->type == Q_SCHEMA && m->qc != NULL)
-               qc_clean(m->qc);
-       be->q = NULL;
-       if (msg)
-               m->session->status = -10;
-       sqlcleanup(be, (!msg) ? 0 : -1);
-       MSresetInstructions(c->curprg->def, 1);
-       freeVariables(c, c->curprg->def, NULL, be->vtop);
-       //be->language = oldlang;
-       /*
-        * Any error encountered during execution should block further 
processing
-        * unless auto_commit has been set.
-        */
-       return msg;
-}
-
 void
 SQLdestroyResult(res_table *destroy)
 {
@@ -692,12 +656,10 @@ RAstatement(Client c, MalBlkPtr mb, MalS
                if (backend_dumpstmt(be, c->curprg->def, rel, 0, 1, NULL) < 0) {
                        msg = createException(SQL,"RAstatement","Program 
contains errors"); // TODO: use macro definition.
                } else {
-                       //SQLaddQueryToCache(c);
                        msg = SQLoptimizeFunction(c, c->curprg->def);
                        if (msg == MAL_SUCCEED)
                                msg = SQLrun(c,m);
                        resetMalBlk(c->curprg->def);
-                       //SQLremoveQueryFromCache(c);
                }
                rel_destroy(rel);
        }
diff --git a/sql/backends/monet5/sql_execute.h 
b/sql/backends/monet5/sql_execute.h
--- a/sql/backends/monet5/sql_execute.h
+++ b/sql/backends/monet5/sql_execute.h
@@ -15,7 +15,6 @@
 #include "sql.h"
 
 sql5_export str SQLstatementIntern(Client c, const char *expr, const char 
*nme, bit execute, bit output, res_table **result);
-sql5_export str SQLengineIntern(Client c, backend *be);
 sql5_export str RAstatement(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str RAstatement2(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str RAstatementEnd(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -366,7 +366,7 @@ SQLexecPostLoginTriggers(Client c)
                                        stream *out = be->out;
                                        be->out = NULL; /* no output stream */
                                        if (!msg)
-                                               msg = SQLrun(c,m);
+                                               msg = SQLrun(c, m);
 
                                        // restore previous state
                                        be->out = out;
@@ -1436,7 +1436,6 @@ SQLparser_body(Client c, backend *be)
 
                int oldvtop = c->curprg->def->vtop;
                int oldstop = c->curprg->def->stop;
-               be->vtop = oldvtop;
                (void)runtimeProfileSetTag(c); /* generate and set the tag in 
the mal block of the clients current program. */
                if (m->emode != m_prepare || (m->emode == m_prepare && (m->emod 
& mod_exec) && is_ddl(r->op)) /* direct execution prepare */) {
                        mvc_query_processed(m);
@@ -1651,6 +1650,7 @@ SQLengine_(Client c)
        if (msg || c->mode <= FINISHCLIENT)
                return msg;
 
+       int oldvtop = c->curprg?c->curprg->def->vtop:0;
        if (be->language == 'X') {
                return SQLchannelcmd(c, be);
        } else if (be->language !='S') {
@@ -1670,7 +1670,27 @@ SQLengine_(Client c)
                sqlcleanup(be, 0);
                return NULL;
        }
-       return SQLengineIntern(c, be);
+
+       mvc *m = be->mvc;
+
+       assert (m->emode != m_deallocate && m->emode != m_prepare);
+       assert (c->curprg->def->stop > 2);
+
+       msg = SQLrun(c, m);
+
+       if (m->type == Q_SCHEMA && m->qc != NULL)
+               qc_clean(m->qc);
+       be->q = NULL;
+       if (msg)
+               m->session->status = -10;
+       sqlcleanup(be, (!msg) ? 0 : -1);
+       MSresetInstructions(c->curprg->def, 1);
+       freeVariables(c, c->curprg->def, NULL, oldvtop);
+       /*
+        * Any error encountered during execution should block further 
processing
+        * unless auto_commit has been set.
+        */
+       return msg;
 }
 
 void
diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -4040,7 +4040,7 @@ stmt_convert(backend *be, stmt *v, stmt 
        if (v->nr < 0)
                goto bailout;
 
-       if (f->type->eclass == EC_EXTERNAL && strcmp(f->type->base.name, 
"json") == 0)
+       if (f->type->eclass == EC_EXTERNAL && t->type->composite && 
strcmp(f->type->base.name, "json") == 0)
                return stmt_from_json(be, v, sel, t);
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to