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 <[email protected]>
+- 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 <[email protected]>
- 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 -- [email protected]
To unsubscribe send an email to [email protected]