Changeset: 573080742d74 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/573080742d74
Branch: default
Log Message:

merged


diffs (truncated from 1218 to 300 lines):

diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -2317,7 +2317,7 @@ BATsetaccess(BAT *b, restrict_t newmode)
        BATcheck(b, NULL);
        if (newmode != BAT_READ &&
            (isVIEW(b) || (ATOMIC_GET(&b->theap->refs) & HEAPREFS) > 1)) {
-               BAT *bn = COLcopy(b, b->ttype, true, TRANSIENT);
+               BAT *bn = COLcopy(b, b->ttype, true, b->batRole);
                BBPunfix(b->batCacheid);
                if (bn == NULL)
                        return NULL;
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -500,6 +500,7 @@ MCcloseClient(Client c)
        c->handshake_options = NULL;
        setClientContext(NULL);
        MT_thread_set_qry_ctx(NULL);
+       assert(c->qryctx.datasize == 0);
        MT_sema_destroy(&c->s);
        MT_lock_set(&mal_contextLock);
        if (shutdowninprogress) {
diff --git a/monetdb5/mal/mal_debugger.c b/monetdb5/mal/mal_debugger.c
--- a/monetdb5/mal/mal_debugger.c
+++ b/monetdb5/mal/mal_debugger.c
@@ -87,9 +87,9 @@ printBATproperties(stream *f, BAT *b)
        if (BBP_refs(b->batCacheid) - 1)
                mnstr_printf(f, " refs=%d ", BBP_refs(b->batCacheid));
        if (b->theap->refs)
-               mnstr_printf(f, " views=%llu", ATOMIC_GET(&b->theap->refs));
+               mnstr_printf(f, " views=%llu", (unsigned long long) 
ATOMIC_GET(&b->theap->refs));
        if (b->tvheap->refs)
-               mnstr_printf(f, " shared vheaps=%llu", 
ATOMIC_GET(&b->tvheap->refs));
+               mnstr_printf(f, " shared vheaps=%llu", (unsigned long long) 
ATOMIC_GET(&b->tvheap->refs));
        if (b->theap->parentid != b->batCacheid)
                mnstr_printf(f, "view on %s ", BBP_logical(b->theap->parentid));
 }
diff --git a/monetdb5/mal/mal_factory.c b/monetdb5/mal/mal_factory.c
--- a/monetdb5/mal/mal_factory.c
+++ b/monetdb5/mal/mal_factory.c
@@ -122,6 +122,8 @@ runFactory(Client cntxt, MalBlkPtr mb, M
        }
        if (mb->errors)
                throw(MAL, "factory.call", PROGRAM_GENERAL);
+       QryCtx *qc = MT_thread_get_qry_ctx();
+       MT_thread_set_qry_ctx(NULL);
        if (firstcall ){
                /* initialize the stack */
                for(i= psig->argc; i< mb->vtop; i++) {
@@ -144,6 +146,7 @@ runFactory(Client cntxt, MalBlkPtr mb, M
         } else {
                msg = reenterMAL(cntxt, mb, pl->pc, -1, pl->stk);
        }
+       MT_thread_set_qry_ctx(qc);
        /* propagate change in debugging status */
        if (cmd && pl->stk && pl->stk->cmd != cmd && cmd != 'x')
                for (; stk; stk = stk->up)
diff --git a/monetdb5/modules/mal/clients.c b/monetdb5/modules/mal/clients.c
--- a/monetdb5/modules/mal/clients.c
+++ b/monetdb5/modules/mal/clients.c
@@ -107,7 +107,7 @@ static str
 CLTInfo(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        bat *ret=  getArgReference_bat(stk,pci,0);
-       bat *ret2=  getArgReference_bat(stk,pci,0);
+       bat *ret2=  getArgReference_bat(stk,pci,1);
        BAT *b = COLnew(0, TYPE_str, 12, TRANSIENT);
        BAT *bn = COLnew(0, TYPE_str, 12, TRANSIENT);
        char buf[32]; /* 32 bytes are enough */
diff --git a/monetdb5/modules/mal/tokenizer.c b/monetdb5/modules/mal/tokenizer.c
--- a/monetdb5/modules/mal/tokenizer.c
+++ b/monetdb5/modules/mal/tokenizer.c
@@ -124,7 +124,7 @@ TKNZRopen(void *ret, str *in)
        }
        tokenDepth = 0;
 
-       TRANS = COLnew(0, TYPE_str, MAX_TKNZR_DEPTH + 1, TRANSIENT);
+       TRANS = COLnew(0, TYPE_str, MAX_TKNZR_DEPTH + 1, SYSTRANS);
        if (TRANS == NULL) {
                MT_lock_unset(&mal_contextLock);
                throw(MAL, "tokenizer.open", SQLSTATE(HY013) MAL_MALLOC_FAIL);
diff --git a/sql/ChangeLog b/sql/ChangeLog
--- a/sql/ChangeLog
+++ b/sql/ChangeLog
@@ -1,6 +1,10 @@
 # ChangeLog file for sql
 # This file is updated with Maddlog
 
+* Thu Nov  3 2022 Martin van Dinther <martin.van.dint...@monetdbsolutions.com>
+- System views sys.dependency_tables_on_functions and
+  dependency_views_on_functions have been extended with column: function_id.
+
 * Fri Sep 30 2022 Joeri van Ruth <joeri.van.r...@monetdbsolutions.com>
 - When loading data using COPY BINARY INTO, apply default values instead of 
just
   inserting NULLs.
diff --git a/sql/backends/monet5/sql_upgrades.c 
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -5407,8 +5407,8 @@ sql_update_default(Client c, mvc *sql, s
                                                        " INSERT INTO 
sys.dump_statements VALUES ((SELECT COUNT(*) FROM sys.dump_statements) + 1, 
'COMMIT;');\n"
                                                        " RETURN 
sys.dump_statements;\n"
                                                        "END;\n"
-                                                       "update sys.functions 
set system = true where system <> true and name in ('sq', 
'get_remote_table_expressions', 'prepare_esc') and schema_id = 2000 and type = 
%d;\n"
-                                                       "update sys._tables set 
system = true where system <> true and name in ('describe_tables', 
'dump_create_users', 'dump_partition_tables', 'dump_comments', 'dump_tables') 
and schema_id = 2000;\n"
+                                                       "update sys.functions 
set system = true where system <> true and name in ('sq', 
'get_remote_table_expressions', 'prepare_esc') and schema_id = 2000 and type = 
%d;\n"
+                                                       "update sys._tables set 
system = true where system <> true and name in ('describe_tables', 
'dump_create_users', 'dump_partition_tables', 'dump_comments', 'dump_tables') 
and schema_id = 2000;\n"
                                                        "update sys.functions 
set system = true where system <> true and name = 'dump_table_data' and 
schema_id = 2000 and type = %d;\n"
                                                        "update sys.functions 
set system = true where system <> true and name = 'dump_database' and schema_id 
= 2000 and type = %d;\n"
                                                        "GRANT SELECT ON 
sys.describe_tables TO PUBLIC;\n",
@@ -5421,6 +5421,50 @@ sql_update_default(Client c, mvc *sql, s
                output = NULL;
        }
 
+       /* Add new column 'function_id' to views
+        * sys.dependency_tables_on_functions and dependency_views_on_functions 
*/
+       pos = snprintf(buf, bufsize,
+                                  "SELECT id FROM sys._columns where name = 
'function_id' "
+                                  "and table_id in (select id FROM sys._tables 
where system "
+                                  "and name in 
('dependency_tables_on_functions','dependency_views_on_functions') "
+                                  "and schema_id = 2000);\n");
+       if ((err = SQLstatementIntern(c, buf, "update", true, false, &output)) 
== NULL) {
+               if ((b = BBPquickdesc(output->cols[0].b)) && BATcount(b) != 2) {
+                       sql_table *t;
+                       if ((t = mvc_bind_table(sql, s, 
"dependency_tables_on_functions")) != NULL)
+                               t->system = 0;
+                       if ((t = mvc_bind_table(sql, s, 
"dependency_views_on_functions")) != NULL)
+                               t->system = 0;
+                       pos = 0;
+                       pos += snprintf(buf + pos, bufsize - pos,
+                                                       "drop view if exists 
sys.dependency_tables_on_functions;\n"
+                                                       "drop view if exists 
sys.dependency_views_on_functions;\n"
+                                                       "CREATE VIEW 
sys.dependency_tables_on_functions AS\n"
+                                                       "SELECT t.schema_id AS 
table_schema_id, t.id AS table_id, t.name AS table_name,"
+                                                       " f.id AS function_id, 
f.name AS function_name, f.type AS function_type, dep.depend_type AS 
depend_type\n"
+                                                       "  FROM sys.functions 
AS f, sys.tables AS t, sys.dependencies AS dep\n"
+                                                       " WHERE t.id = dep.id 
AND f.id = dep.depend_id\n"
+                                                       "   AND dep.depend_type 
= 7 AND f.type <> 2 AND t.type NOT IN (1, 11)\n"
+                                                       " ORDER BY t.name, 
t.schema_id, f.name, f.id;\n"
+                                                       "GRANT SELECT ON 
sys.dependency_tables_on_functions TO PUBLIC;\n"
+                                                       "CREATE VIEW 
sys.dependency_views_on_functions AS\n"
+                                                       "SELECT v.schema_id AS 
view_schema_id, v.id AS view_id, v.name AS view_name,"
+                                                       " f.id AS function_id, 
f.name AS function_name, f.type AS function_type, dep.depend_type AS 
depend_type\n"
+                                                       "  FROM sys.functions 
AS f, sys.tables AS v, sys.dependencies AS dep\n"
+                                                       " WHERE v.id = dep.id 
AND f.id = dep.depend_id\n"
+                                                       "   AND dep.depend_type 
= 7 AND f.type <> 2 AND v.type IN (1, 11)\n"
+                                                       " ORDER BY v.name, 
v.schema_id, f.name, f.id;\n"
+                                                       "GRANT SELECT ON 
sys.dependency_views_on_functions TO PUBLIC;\n"
+                                                       "update sys._tables set 
system = true where system <> true and name in "
+                                                       
"('dependency_tables_on_functions','dependency_views_on_functions') and 
schema_id = 2000;\n");
+                       assert(pos < bufsize);
+                       printf("Running database upgrade commands:\n%s\n", buf);
+                       err = SQLstatementIntern(c, buf, "update", true, false, 
NULL);
+               }
+               res_table_destroy(output);
+               output = NULL;
+       }
+
        GDKfree(buf);
        return err;             /* usually MAL_SUCCEED */
 }
diff --git a/sql/scripts/21_dependency_views.sql 
b/sql/scripts/21_dependency_views.sql
--- a/sql/scripts/21_dependency_views.sql
+++ b/sql/scripts/21_dependency_views.sql
@@ -167,7 +167,7 @@ GRANT SELECT ON sys.dependency_schemas_o
 -- SELECT * FROM sys.dependencies_vw WHERE depend_type = 7 ORDER BY obj_type, 
id;
 -- Table t has a dependency on function f.
 CREATE VIEW sys.dependency_tables_on_functions AS
-SELECT t.schema_id AS table_schema_id, t.id AS table_id, t.name AS table_name, 
f.name AS function_name, f.type AS function_type, dep.depend_type AS depend_type
+SELECT t.schema_id AS table_schema_id, t.id AS table_id, t.name AS table_name, 
f.id AS function_id, f.name AS function_name, f.type AS function_type, 
dep.depend_type AS depend_type
   FROM sys.functions AS f, sys.tables AS t, sys.dependencies AS dep
  WHERE t.id = dep.id AND f.id = dep.depend_id
    AND dep.depend_type = 7 AND f.type <> 2 AND t.type NOT IN (1, 11)
@@ -177,7 +177,7 @@ GRANT SELECT ON sys.dependency_tables_on
 
 -- View v has a dependency on function f.
 CREATE VIEW sys.dependency_views_on_functions AS
-SELECT v.schema_id AS view_schema_id, v.id AS view_id, v.name AS view_name, 
f.name AS function_name, f.type AS function_type, dep.depend_type AS depend_type
+SELECT v.schema_id AS view_schema_id, v.id AS view_id, v.name AS view_name, 
f.id AS function_id, f.name AS function_name, f.type AS function_type, 
dep.depend_type AS depend_type
   FROM sys.functions AS f, sys.tables AS v, sys.dependencies AS dep
  WHERE v.id = dep.id AND f.id = dep.depend_id
    AND dep.depend_type = 7 AND f.type <> 2 AND v.type IN (1, 11)
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -62,6 +62,29 @@ static void merge_delta( sql_delta *obat
                ((!seg->deleted && VALID_4_READ(seg->ts, tr)) || \
                 (seg->deleted && OLD_VALID_4_READ(seg->ts, seg->oldts, tr)))
 
+static inline void
+transfer_to_systrans(BAT *b)
+{
+       /* transfer a BAT from the TRANSIENT farm to the SYSTRANS farm */
+       MT_lock_set(&b->theaplock);
+       if (b->theap->farmid == TRANSIENT ||
+               (b->tvheap && b->tvheap->farmid == TRANSIENT)) {
+               QryCtx *qc = MT_thread_get_qry_ctx();
+               if (qc) {
+                       if (b->theap->farmid == TRANSIENT && b->theap->parentid 
== b->batCacheid) {
+                               ATOMIC_SUB(&qc->datasize, b->theap->size);
+                               b->theap->farmid = SYSTRANS;
+                               b->batRole = SYSTRANS;
+                       }
+                       if (b->tvheap && b->tvheap->farmid == TRANSIENT && 
b->tvheap->parentid == b->batCacheid) {
+                               ATOMIC_SUB(&qc->datasize, b->tvheap->size);
+                               b->tvheap->farmid = SYSTRANS;
+                       }
+               }
+       }
+       MT_lock_unset(&b->theaplock);
+}
+
 static void
 lock_table(sqlstore *store, sqlid id)
 {
@@ -474,7 +497,7 @@ new_segments(sql_trans *tr, size_t cnt)
 static int
 temp_dup_cs(column_storage *cs, ulng tid, int type)
 {
-       BAT *b = bat_new(type, 1024, TRANSIENT);
+       BAT *b = bat_new(type, 1024, SYSTRANS);
        if (!b)
                return LOG_ERR;
        bat_set_access(b, BAT_READ);
@@ -838,8 +861,8 @@ merge_updates( BAT *ui, BAT **UV, BAT *o
        int err = 0;
        BAT *uv = *UV;
        BUN cnt = BATcount(ui)+BATcount(oi);
-       BAT *ni = bat_new(TYPE_oid, cnt, TRANSIENT);
-       BAT *nv = uv?bat_new(uv->ttype, cnt, TRANSIENT):NULL;
+       BAT *ni = bat_new(TYPE_oid, cnt, SYSTRANS);
+       BAT *nv = uv?bat_new(uv->ttype, cnt, SYSTRANS):NULL;
 
        if (!ni || (uv && !nv)) {
                bat_destroy(ni);
@@ -1244,7 +1267,7 @@ dict_append_bat(sql_trans *tr, sql_delta
                                }
                                if (cs->ucnt) {
                                        BAT *ui = NULL, *uv = NULL;
-                                       BAT *nb = COLcopy(b, b->ttype, true, 
TRANSIENT);
+                                       BAT *nb = COLcopy(b, b->ttype, true, 
SYSTRANS);
                                        bat_destroy(b);
                                        if (!nb || cs_real_update_bats(cs, &ui, 
&uv) != LOG_OK) {
                                                bat_destroy(nb);
@@ -1279,6 +1302,7 @@ dict_append_bat(sql_trans *tr, sql_delta
                                if (cs->bid && !new)
                                        temp_destroy(cs->bid);
                                bat_set_access(n, BAT_READ);
+                               transfer_to_systrans(n);
                                cs->bid = temp_create(n);
                                bat_destroy(n);
                                if (cs->ebid && !new)
@@ -1321,6 +1345,7 @@ dict_append_bat(sql_trans *tr, sql_delta
                                if (cs->bid && !new)
                                        temp_destroy(cs->bid);
                                bat_set_access(n, BAT_READ);
+                               transfer_to_systrans(n);
                                cs->bid = temp_create(n);
                                bat_destroy(n);
                                cs->cleared = true;
@@ -1351,7 +1376,7 @@ for_append_bat(column_storage *cs, BAT *
                if (!newoffsets) { /* decompress */
                        if (cs->ucnt) {
                                BAT *ui = NULL, *uv = NULL;
-                               BAT *nb = COLcopy(b, b->ttype, true, TRANSIENT);
+                               BAT *nb = COLcopy(b, b->ttype, true, SYSTRANS);
                                bat_destroy(b);
                                if (!nb || cs_real_update_bats(cs, &ui, &uv) != 
LOG_OK) {
                                        bat_destroy(nb);
@@ -1373,6 +1398,7 @@ for_append_bat(column_storage *cs, BAT *
                        if (cs->bid)
                                temp_destroy(cs->bid);
                        bat_set_access(n, BAT_READ);
+                       transfer_to_systrans(n);
                        cs->bid = temp_create(n);
                        cs->ucnt = 0;
                        if (cs->uibid)
@@ -1418,7 +1444,7 @@ cs_update_bat( sql_trans *tr, sql_delta 
                        return LOG_ERR;
                }
        } else if (updates && updates->ttype == TYPE_void && 
!complex_cand(updates)) { /* dense later use optimized log structure */
-               updates = COLcopy(updates, TYPE_oid, true /* make sure we get a 
oid col */, TRANSIENT);
+               updates = COLcopy(updates, TYPE_oid, true /* make sure we get a 
oid col */, SYSTRANS);
                if (!updates) {
                        if (otids != tids)
                                bat_destroy(tids);
@@ -1499,7 +1525,7 @@ cs_update_bat( sql_trans *tr, sql_delta 
                                        BUN lend = end < seg->end?end:seg->end;
                                        if (seg->ts == tr->tid && 
!seg->deleted) {
                                                if (!ins) {
-                                                       ins = COLnew(0, 
TYPE_msk, ucnt, TRANSIENT);
+                                                       ins = COLnew(0, 
TYPE_msk, ucnt, SYSTRANS);
                                                        if (!ins)
                                                                res = LOG_ERR;
                                                        else {
@@ -1543,7 +1569,7 @@ cs_update_bat( sql_trans *tr, sql_delta 
                                        /* check for inplace updates */
                                        if (seg->ts == tr->tid && 
!seg->deleted) {
                                                if (!ins) {
-                                                       ins = COLnew(0, 
TYPE_msk, ucnt, TRANSIENT);
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to