Changeset: 4de67c46e4c5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4de67c46e4c5
Modified Files:
        clients/Tests/exports.stable.out
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_statement.h
        sql/backends/monet5/vaults/monetdb/monetdb.c
        sql/backends/monet5/vaults/odbc/odbc_loader.c
        sql/include/sql_relation.h
        sql/server/rel_distribute.c
        sql/server/rel_dump.c
        sql/server/rel_optimizer.c
        sql/server/rel_rel.c
        sql/server/rel_rel.h
        sql/server/rel_unnest.c
Branch: nested
Log Message:

merged with default


diffs (truncated from 2228 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
@@ -1647,6 +1647,7 @@ sql_part *partition_find_part(sql_trans 
 int pl_register(const char *name, pl_add_types_fptr add_types, pl_load_fptr 
pl_load);
 void pl_unregister(const char *name);
 prop *prop_create(allocator *sa, rel_prop kind, prop *pre);
+InstrPtr pushPtr(MalBlkPtr mb, InstrPtr q, ptr val);
 void qc_delete(qc *cache, cq *q);
 cq *qc_find(qc *cache, int id);
 cq *qc_insert(qc *cache, allocator *sa, sql_rel *r, symbol *s, list *params, 
mapi_query_t type, char *codedstr, int no_mitosis);
@@ -1686,7 +1687,9 @@ void sql_register(const char *name, cons
 int sql_trans_add_dependency_change(sql_trans *tr, sqlid id, 
sql_dependency_change_type tp);
 int sql_trans_create_table(sql_table **tres, sql_trans *tr, sql_schema *s, 
const char *name, const char *sql, int tt, bit system, int persistence, int 
commit_action, int sz, bte properties);
 stmt *stmt_alias(backend *be, stmt *op1, int label, sql_alias *tname, const 
char *name);
+stmt *stmt_blackbox_result(backend *be, InstrPtr q, int retnr, sql_subtype *t);
 stmt *stmt_func(backend *be, stmt *ops, const char *name, sql_rel *imp, int 
f_union);
+stmt *stmt_list(backend *be, list *l);
 stmt *stmt_none(backend *be);
 
 # stream
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -1382,7 +1382,8 @@ SQLrenderer(MapiHdl hdl)
                             strcmp(s, "clob") != 0 &&
                             strcmp(s, "char") != 0 &&
                             strcmp(s, "str") != 0 &&
-                            strcmp(s, "json") != 0)) {
+                            strcmp(s, "json") != 0 &&
+                            strcmp(s, "uuid") != 0)) {
                                /* no table width known, use maximum,
                                 * rely on squeezing later on to fix
                                 * it to whatever is available; note
diff --git a/gdk/CMakeLists.txt b/gdk/CMakeLists.txt
--- a/gdk/CMakeLists.txt
+++ b/gdk/CMakeLists.txt
@@ -16,7 +16,6 @@ set(gdk_public_headers
   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/gdk_posix.h>
   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/gdk_atoms.h>
   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/gdk_tracer.h>
-  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/gdk_delta.h>
   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/gdk_hash.h>
   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/gdk_bbp.h>
   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/gdk_utils.h>
@@ -28,7 +27,6 @@ set(gdk_public_headers
   $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_posix.h>
   $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_atoms.h>
   $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_tracer.h>
-  $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_delta.h>
   $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_hash.h>
   $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_bbp.h>
   $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_utils.h>
@@ -71,7 +69,7 @@ target_sources(bat
   gdk_rsort.c
   gdk_storage.c
   gdk_bat.c
-  gdk_delta.c gdk_delta.h
+  gdk_delta.c
   gdk_cross.c
   gdk_system.c
   gdk_value.c
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1890,7 +1890,8 @@ gdk_export gdk_return BATorderidx(BAT *b
 gdk_export gdk_return GDKmergeidx(BAT *b, BAT**a, int n_ar);
 gdk_export bool BATcheckorderidx(BAT *b);
 
-#include "gdk_delta.h"
+#define DELTAdirty(b)  ((b)->batInserted < BATcount(b))
+
 #include "gdk_hash.h"
 #include "gdk_bbp.h"
 #include "gdk_utils.h"
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -276,7 +276,6 @@ COLnew2(oid hseq, int tt, BUN cap, role_
                HEAPfree(bn->theap, true);
                goto bailout;
        }
-       DELTAinit(bn);
        if (BBPcacheit(bn, true) != GDK_SUCCEED) {
                /* cannot happen, function always returns success */
                goto bailout;
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -2995,19 +2995,6 @@ decref(bat i, bool logical, bool lock, c
                        MT_lock_set(&b->theaplock);
                        locked = true;
                }
-#if 0
-               if (b->batCount > b->batInserted && !isVIEW(b)) {
-                       /* if batCount is larger than batInserted and
-                        * the dirty bits are off, it may be that a
-                        * (sub)commit happened in parallel to an
-                        * update; we must undo the turning off of the
-                        * dirty bits */
-                       if (b->theap && b->theap->parentid == i)
-                               b->theap->dirty = true;
-                       if (b->tvheap && b->tvheap->parentid == i)
-                               b->tvheap->dirty = true;
-               }
-#endif
                if (b->theap)
                        farmid = b->theap->farmid;
        }
@@ -3077,8 +3064,10 @@ decref(bat i, bool logical, bool lock, c
                        BATdelete(BBP_desc(i));
                        BBPclear(i);
                } else {
+                       MT_lock_set(&GDKswapLock(i));
                        BBP_status_off(i, BBPUNLOADING);
                        MT_cond_broadcast(&GDKswapCond(i));
+                       MT_lock_unset(&GDKswapLock(i));
                }
        }
        return refs;
@@ -3254,9 +3243,12 @@ BBPsave(BAT *b)
                if (ret == GDK_SUCCEED) {
                        ret = BATsave(b);
                }
-               /* clearing bits can be done without the lock */
+               if (lock)
+                       MT_lock_set(&GDKswapLock(bid));
                BBP_status_off(bid, BBPSAVING);
                MT_cond_broadcast(&GDKswapCond(bid));
+               if (lock)
+                       MT_lock_unset(&GDKswapLock(bid));
        }
        return ret;
 }
@@ -3313,8 +3305,10 @@ BBPfree(BAT *b)
                BBPuncacheit(bid, false);
        }
        TRC_DEBUG(BAT_, "turn off unloading %d\n", bid);
+       MT_lock_set(&GDKswapLock(bid));
        BBP_status_off(bid, BBPUNLOADING);
        MT_cond_broadcast(&GDKswapCond(bid));
+       MT_lock_unset(&GDKswapLock(bid));
        BBP_unload_dec();
        return ret;
 }
@@ -3927,8 +3921,12 @@ BBPsync(int cnt, bat *restrict subcommit
                                if (lock)
                                        MT_lock_unset(&GDKswapLock(i));
                                ret = BATsave_iter(b, &bi, size);
+                               if (lock)
+                                       MT_lock_set(&GDKswapLock(i));
                                BBP_status_off(i, BBPSAVING);
                                MT_cond_broadcast(&GDKswapCond(i));
+                               if (lock)
+                                       MT_lock_unset(&GDKswapLock(i));
                        }
                        bip = &bi;
                } else {
@@ -4009,8 +4007,12 @@ BBPsync(int cnt, bat *restrict subcommit
         * GDK_SUCCEED) */
        for (int idx = 1; idx < cnt; idx++) {
                bat i = subcommit ? subcommit[idx] : idx;
+               if (lock)
+                       MT_lock_set(&GDKswapLock(i));
                BBP_status_off(i, BBPSYNCING);
                MT_cond_broadcast(&GDKswapCond(i));
+               if (lock)
+                       MT_lock_unset(&GDKswapLock(i));
        }
 
        return ret;
diff --git a/gdk/gdk_delta.h b/gdk/gdk_delta.h
deleted file mode 100644
--- a/gdk/gdk_delta.h
+++ /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.
- */
-
-#ifndef _GDK_DELTA_H_
-#define _GDK_DELTA_H_
-
-/*
- * We make sure here that the BUNs section of a BAT at least starts 4
- * bytes from the BUN start.  This ensures that the first data item of
- * e.g. a BAT[void,bit] is (at least) integer aligned.  This optimizes
- * processing on such BATs (DDBENCH).
- */
-static inline void
-DELTAinit(BAT *b)
-{
-       BATsetcount(b, 0);
-       b->theap->free = 0;
-       b->batInserted = 0;
-       b->tshift = ATOMelmshift(b->twidth);
-       TRC_DEBUG(DELTA,
-                 "%s free %zu ins " BUNFMT " base %p\n",
-                 BBP_logical(b->batCacheid),
-                 b->theap->free,
-                 b->batInserted,
-                 b->theap->base);
-}
-
-/*
- * Upon saving a BAT, we should convert the delta marker BUN pointers
- * into indexes and convert them back into pointers upon reload.
- *
- * The BATdirty(b) tells you whether a BAT's main memory
- * representation differs from its saved image on stable storage. But
- * *not* whether it has changed since last transaction commit (it can
- * be storage-clean, but transaction-dirty). For this we have
- * DELTAdirty(b).
- */
-#define DELTAdirty(b)  ((b)->batInserted < BATcount(b))
-
-#endif /* _GDK_DELTA_H_ */
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -2976,9 +2976,8 @@ hashjoin(BAT **r1p, BAT **r2p, BAT **r3p
                b = BATdescriptor(VIEWtparent(r));
                if (b == NULL)
                        goto bailout;
-               TRC_DEBUG(ALGO, "%s(%s): using "
+               TRC_DEBUG(ALGO, "%s: using "
                          "parent(" ALGOBATFMT ") for hash%s\n",
-                         __func__,
                          BATgetId(r), ALGOBATPAR(b),
                          swapped ? " (swapped)" : "");
                roff = r->tbaseoff - b->tbaseoff;
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -776,6 +776,10 @@ la_bat_updates(logger *lg, logaction *la
                                                        b->tnokey[0] = 0;
                                                        b->tnokey[1] = 0;
                                                }
+                                               if (b->tminpos == q)
+                                                       b->tminpos = BUN_NONE;
+                                               if (b->tmaxpos == q)
+                                                       b->tmaxpos = BUN_NONE;
                                                b->tkey = false;
                                                b->tsorted = false;
                                                b->tkey = false;
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -1016,6 +1016,7 @@ GDKinit(opt *set, int setlen, bool embed
                        char name[MT_NAME_LEN];
                        snprintf(name, sizeof(name), "GDKswapLock%d", i);
                        MT_lock_init(&GDKbatLock[i].swap, name);
+                       snprintf(name, sizeof(name), "GDKswapCond%d", i);
                        MT_cond_init(&GDKbatLock[i].cond, name);
                }
                if (mnstr_init() < 0) {
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
@@ -86,7 +86,7 @@ dump_2(MalBlkPtr mb, const char *mod, co
        return q;
 }
 
-static InstrPtr
+InstrPtr
 pushPtr(MalBlkPtr mb, InstrPtr q, ptr val)
 {
        int _t;
@@ -4636,6 +4636,7 @@ stmt_func(backend *be, stmt *ops, const 
        if ((p = find_prop(rel->p, PROP_REMOTE)))
                rel->p = prop_remove(rel->p, p);
        /* sql_processrelation may split projections, so make sure the topmost 
relation only contains references */
+       int opt = rel->opt;
        rel = rel_project(be->mvc->sa, rel, rel_projections(be->mvc, rel, NULL, 
1, 1));
        if (!(rel = sql_processrelation(be->mvc, rel, 0, 0, 1, 1)))
                goto bailout;
@@ -4643,6 +4644,7 @@ stmt_func(backend *be, stmt *ops, const 
                p->p = rel->p;
                rel->p = p;
        }
+       rel->opt = opt;
 
        if (monet5_create_relational_function(be->mvc, sql_private_module_name, 
name, rel, ops, NULL, 1) < 0)
                goto bailout;
diff --git a/sql/backends/monet5/sql_statement.h 
b/sql/backends/monet5/sql_statement.h
--- a/sql/backends/monet5/sql_statement.h
+++ b/sql/backends/monet5/sql_statement.h
@@ -228,7 +228,7 @@ extern stmt *stmt_left_project(backend *
 extern stmt *stmt_dict(backend *be, stmt *op1, stmt *op2);
 extern stmt *stmt_for(backend *be, stmt *op1, stmt *minval);
 
-extern stmt *stmt_list(backend *be, list *l);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to