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