Changeset: 6b50d879e364 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/6b50d879e364 Modified Files: sql/test/emptydb/Tests/check.stable.out sql/test/emptydb/Tests/check.stable.out.32bit sql/test/emptydb/Tests/check.stable.out.int128 Branch: extract_types Log Message:
Merge with default. diffs (truncated from 423 to 300 lines): diff --git a/common/stream/iconv_stream.c b/common/stream/iconv_stream.c --- a/common/stream/iconv_stream.c +++ b/common/stream/iconv_stream.c @@ -90,8 +90,7 @@ ic_write(stream *restrict s, const void /* not enough space in output buffer */ break; default: - /* cannot happen (according to manual) */ - mnstr_set_error(s, MNSTR_WRITE_ERROR, "iconv internal error %d", errno); + mnstr_set_error_errno(s, MNSTR_WRITE_ERROR, "iconv reported an error"); goto bailout; } } @@ -153,7 +152,7 @@ ic_read(stream *restrict s, void *restri } if (iconv(ic->cd, NULL, NULL, &outbuf, &outbytesleft) == (size_t) -1) { /* some error occurred */ - mnstr_set_error(s, MNSTR_READ_ERROR, "unspecified iconv error occurred"); + mnstr_set_error_errno(s, MNSTR_READ_ERROR, "iconv reported an error"); return -1; } goto exit_func; /* double break */ @@ -176,8 +175,7 @@ ic_read(stream *restrict s, void *restri * the buffer */ goto exit_func; default: - /* cannot happen (according to manual) */ - mnstr_set_error(s, MNSTR_READ_ERROR, "inconv stream: internal error"); + mnstr_set_error_errno(s, MNSTR_READ_ERROR, "iconv reported an error"); return -1; } } 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/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/server/rel_statistics.c b/sql/server/rel_statistics.c --- a/sql/server/rel_statistics.c +++ b/sql/server/rel_statistics.c @@ -883,7 +883,8 @@ rel_get_statistics_(visitor *v, sql_rel } } } - set_count_prop(v->sql->sa, rel, cnt/u); + /* u is an *estimate*, so don't set count_prop to 0 unless cnt is 0 */ + set_count_prop(v->sql->sa, rel, cnt == 0 ? 0 : u > cnt ? 1 : cnt/u); } else { set_count_prop(v->sql->sa, rel, get_rel_count(l)); } 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) { @@ -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; @@ -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) @@ -1626,6 +1652,8 @@ cs_update_bat( sql_trans *tr, sql_delta } else { temp_destroy(cs->uibid); temp_destroy(cs->uvbid); + transfer_to_systrans(ui); + transfer_to_systrans(uv); cs->uibid = temp_create(ui); cs->uvbid = temp_create(uv); cs->ucnt = BATcount(ui); @@ -1718,6 +1746,8 @@ cs_update_bat( sql_trans *tr, sql_delta if (res == LOG_OK) { temp_destroy(cs->uibid); temp_destroy(cs->uvbid); + transfer_to_systrans(nui); + transfer_to_systrans(nuv); cs->uibid = temp_create(nui); cs->uvbid = temp_create(nuv); cs->ucnt = BATcount(nui); @@ -1808,6 +1838,7 @@ dict_append_val(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) @@ -1845,6 +1876,7 @@ dict_append_val(sql_trans *tr, sql_delta if (cs->bid) 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; @@ -1881,6 +1913,7 @@ for_append_val(column_storage *cs, void if (cs->bid) temp_destroy(cs->bid); bat_set_access(n, BAT_READ); + transfer_to_systrans(n); cs->bid = temp_create(n); cs->st = ST_DEFAULT; /* at append_col the column's storage type is cleared */ @@ -4971,10 +5004,12 @@ col_compress(sql_trans *tr, sql_column * if (d->cs.bid) temp_destroy(d->cs.bid); bat_set_access(o, BAT_READ); + transfer_to_systrans(o); d->cs.bid = temp_create(o); if (u) { if (d->cs.ebid) temp_destroy(d->cs.ebid); + transfer_to_systrans(u); d->cs.ebid = temp_create(u); } return LOG_OK; diff --git a/sql/test/BugTracker-2022/Tests/dependencies.Bug-7328.test b/sql/test/BugTracker-2022/Tests/dependencies.Bug-7328.test --- a/sql/test/BugTracker-2022/Tests/dependencies.Bug-7328.test +++ b/sql/test/BugTracker-2022/Tests/dependencies.Bug-7328.test @@ -123,6 +123,10 @@ FROM sys.dependency_columns_on_functions WHERE function_name LIKE 'mmtest04' ORDER BY name ---- +id +mmtest04 +1 +7 name mmtest04 1 diff --git a/sql/test/emptydb/Tests/check.stable.out b/sql/test/emptydb/Tests/check.stable.out --- a/sql/test/emptydb/Tests/check.stable.out +++ b/sql/test/emptydb/Tests/check.stable.out @@ -451,13 +451,13 @@ select 'null in value_partitions.value', [ "sys._tables", "sys", "dependency_owners_on_schemas", "create view sys.dependency_owners_on_schemas as select a.name as owner_name, s.id as schema_id, s.name as schema_name, cast(1 as smallint) as depend_type from sys.schemas as s, sys.auths as a where s.owner = a.id order by a.name, s.name;", "VIEW", true, "COMMIT", "WRITABLE", NULL ] [ "sys._tables", "sys", "dependency_schemas_on_users", "create view sys.dependency_schemas_on_users as select s.id as schema_id, s.name as schema_name, u.name as user_name, cast(6 as smallint) as depend_type from sys.db_user_info as u, sys.schemas as s where u.default_schema = s.id order by s.name, u.name;", "VIEW", true, "COMMIT", "WRITABLE", NULL ] [ "sys._tables", "sys", "dependency_tables_on_foreignkeys", "create view sys.dependency_tables_on_foreignkeys as select t.schema_id as table_schema_id, t.id as table_id, t.name as table_name, fk.name as fk_name, cast(k.type as smallint) as key_type, cast(11 as smallint) as depend_type from sys.tables as t, sys.keys as k, sys.keys as fk where fk.rkey = k.id and k.table_id = t.id order by t.schema_id, t.name, fk.name;", "VIEW", true, "COMMIT", "WRITABLE", NULL ] -[ "sys._tables", "sys", "dependency_tables_on_functions", "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 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) order by t.name, t.schema_id, f.name, f.id;", "VIEW", true, "COMMIT", "WRITABLE", NULL ] +[ "sys._tables", "sys", "dependency_tables_on_functions", "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.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) order by t.name, t.schema_id, f.name, f.id;", "VIEW", true, "COMMIT", "WRITABLE", NULL ] [ "sys._tables", "sys", "dependency_tables_on_indexes", "create view sys.dependency_tables_on_indexes as select t.schema_id as table_schema_id, t.id as table_id, t.name as table_name, i.id as index_id, i.name as index_name, i.type as index_type, cast(10 as smallint) as depend_type from sys.tables as t, sys.idxs as i where i.table_id = t.id and (i.table_id, i.name) not in (select k.table_id, k.name from sys.keys k) order by t.schema_id, t.name, i.name;", "VIEW", true, "COMMIT", "WRITABLE", NULL ] [ "sys._tables", "sys", "dependency_tables_on_procedures", "create view sys.dependency_tables_on_procedures as select t.schema_id as table_schema_id, t.id as table_id, t.name as table_name, p.id as procedure_id, p.name as procedure_name, p.type as procedure_type, dep.depend_type as depend_type from sys.functions as p, sys.tables as t, sys.dependencies as dep where t.id = dep.id and p.id = dep.depend_id and dep.depend_type = 13 and p.type = 2 and t.type not in (1, 11) order by t.name, t.schema_id, p.name, p.id;", "VIEW", true, "COMMIT", "WRITABLE", NULL ] [ "sys._tables", "sys", "dependency_tables_on_triggers", "create view sys.dependency_tables_on_triggers as (select t.schema_id as table_schema_id, t.id as table_id, t.name as table_name, tri.id as trigger_id, tri.name as trigger_name, cast(8 as smallint) as depend_type from sys.tables as t, sys.triggers as tri where tri.table_id = t.id) union (select t.schema_id as table_schema_id, t.id as table_id, t.name as table_name, tri.id as trigger_id, tri.name as trigger_name, dep.depend_type as depend_type from sys.tables as t, sys.triggers as tri, sys.dependencies as dep where dep.id = t.id and dep.depend_id = tri.id and dep.depend_type = 8) order by table_schema_id, table_name, trigger_name;", "VIEW", true, "COMMIT", "WRITABLE", NULL ] [ "sys._tables", "sys", "dependency_tables_on_views", "create view sys.dependency_tables_on_views as select t.schema_id as table_schema_id, t.id as table_id, t.name as table_name, v.schema_id as view_schema_id, v.id as view_id, v.name as view_name, dep.depend_type as depend_type from sys.tables as t, sys.tables as v, sys.dependencies as dep where t.id = dep.id and v.id = dep.depend_id and dep.depend_type = 5 and t.type not in (1, 11) and v.type in (1, 11) order by t.schema_id, t.name, v.schema_id, v.name;", "VIEW", true, "COMMIT", "WRITABLE", NULL ] [ "sys._tables", "sys", "dependency_types", NULL, "TABLE", true, "COMMIT", "READONLY", NULL ] -[ "sys._tables", "sys", "dependency_views_on_functions", "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 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) order by v.name, v.schema_id, f.name, f.id;", "VIEW", true, "COMMIT", "WRITABLE", NULL ] +[ "sys._tables", "sys", "dependency_views_on_functions", "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.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) order by v.name, v.schema_id, f.name, f.id;", "VIEW", true, "COMMIT", "WRITABLE", NULL ] [ "sys._tables", "sys", "dependency_views_on_procedures", "create view sys.dependency_views_on_procedures as select v.schema_id as view_schema_id, v.id as view_id, v.name as view_name, p.id as procedure_id, p.name as procedure_name, p.type as procedure_type, dep.depend_type as depend_type from sys.functions as p, sys.tables as v, sys.dependencies as dep where v.id = dep.id and p.id = dep.depend_id and dep.depend_type = 13 and p.type = 2 and v.type in (1, 11) order by v.name, v.schema_id, p.name, p.id;", "VIEW", true, "COMMIT", "WRITABLE", NULL ] [ "sys._tables", "sys", "dependency_views_on_views", "create view sys.dependency_views_on_views as select v1.schema_id as view1_schema_id, v1.id as view1_id, v1.name as view1_name, v2.schema_id as view2_schema_id, v2.id as view2_id, v2.name as view2_name, dep.depend_type as depend_type from sys.tables as v1, sys.tables as v2, sys.dependencies as dep where v1.id = dep.id and v2.id = dep.depend_id and dep.depend_type = 5 and v1.type in (1, 11) and v2.type in (1, 11) order by v1.schema_id, v1.name, v2.schema_id, v2.name;", "VIEW", true, "COMMIT", "WRITABLE", NULL ] _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org