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