Changeset: 7a24df6619e9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7a24df6619e9
Modified Files:
sql/backends/monet5/sql.c
sql/backends/monet5/sql_cat.c
sql/backends/monet5/sql_upgrades.c
sql/server/sql_mvc.c
sql/server/sql_mvc.h
sql/server/sql_partition.c
sql/storage/bat/bat_logger.c
sql/storage/objectset.c
sql/storage/sql_storage.h
sql/storage/store.c
sql/storage/store_dependency.c
sql/test/BugTracker-2018/Tests/groupby_having_orderby_count.Bug-6624.test
sql/test/BugTracker-2024/Tests/7488-orderby-max-over-rows.test
sql/test/Dependencies/Tests/dependency_loop.test
sql/test/Dependencies/Tests/view_table_udf.test
sql/test/emptydb-previous-upgrade-hge/Tests/upgrade.stable.out.int128
sql/test/emptydb-previous-upgrade/Tests/upgrade.stable.out
sql/test/emptydb-upgrade-hge/Tests/upgrade.stable.out.int128
sql/test/emptydb-upgrade/Tests/upgrade.stable.out
sql/test/emptydb/Tests/check.stable.out
sql/test/emptydb/Tests/check.stable.out.int128
sql/test/mergetables/Tests/mergetabledependencies.test
sql/test/testdb-previous-upgrade-hge/Tests/upgrade.stable.out.int128
sql/test/testdb-previous-upgrade/Tests/upgrade.stable.out
sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out.int128
sql/test/testdb-upgrade/Tests/upgrade.stable.out
Branch: Dec2025
Log Message:
Split off tmp.dependencies from sys.dependencies.
sys.dependencies now only records dependencies for global objects,
whereas tmp.dependencies records dependencies for local-to-the-session
objects.
Upgrade from the Dec2025 and older releases should work without problem,
however, upgrade from an intermediate, post-release build may be
problematic if you have any BLOB columns in your database: before
upgrade, make sure the WAL is empty (maybe first run `mserver5
--process-wal-and-exit`), then edit `sql_logs/sql/log` and change the
version number on the first line to 052305, then upgrade.
Fixes #7765.
diffs (truncated from 915 to 300 lines):
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -355,7 +355,7 @@ create_table_or_view(mvc *sql, char *sna
so no additional dependencies are needed */
if (strncmp(c->def, next_value_for,
strlen(next_value_for)) != 0) {
list *blist = rel_dependencies(sql, r);
- if (mvc_create_dependencies(sql, blist,
nt->base.id, FUNC_DEPENDENCY)) {
+ if (mvc_create_dependencies(sql, blist,
nt->base.id, FUNC_DEPENDENCY, temp)) {
ma_destroy(nsa);
sql->sa = osa;
throw(SQL, "sql.catalog",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
@@ -484,7 +484,7 @@ create_table_or_view(mvc *sql, char *sna
r = sql_processrelation(sql, r, 0, 0, 0, 0);
if (r) {
list *blist = rel_dependencies(sql, r);
- if (mvc_create_dependencies(sql, blist, nt->base.id,
VIEW_DEPENDENCY)) {
+ if (mvc_create_dependencies(sql, blist, nt->base.id,
VIEW_DEPENDENCY, temp)) {
ma_destroy(nsa);
sql->sa = osa;
throw(SQL, "sql.catalog", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -599,7 +599,7 @@ create_trigger(mvc *sql, char *sname, ch
r = sql_processrelation(sql, r, 0, 0, 0, 0);
if (r) {
list *blist = rel_dependencies(sql, r);
- if (mvc_create_dependencies(sql, blist,
tri->base.id, TRIGGER_DEPENDENCY)) {
+ if (mvc_create_dependencies(sql, blist,
tri->base.id, TRIGGER_DEPENDENCY, SQL_PERSIST)) {
ma_destroy(sql->sa);
sql->sa = sa;
throw(SQL, "sql.create_trigger",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
@@ -1101,7 +1101,7 @@ create_func(mvc *sql, char *sname, char
for (n = f->ops->h; n; n = n->next) {
sql_arg *a = n->data;
- if (a->type.type->s &&
mvc_create_dependency(sql, &a->type.type->base, nf->base.id, TYPE_DEPENDENCY)) {
+ if (a->type.type->s &&
mvc_create_dependency(sql, &a->type.type->base, nf->base.id, TYPE_DEPENDENCY,
SQL_PERSIST)) {
ma_destroy(sql->sa);
sql->sa = sa;
throw(SQL, "sql.create_func",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
@@ -1112,14 +1112,14 @@ create_func(mvc *sql, char *sname, char
for (n = f->res->h; n; n = n->next) {
sql_arg *a = n->data;
- if (a->type.type->s &&
mvc_create_dependency(sql, &a->type.type->base, nf->base.id, TYPE_DEPENDENCY)) {
+ if (a->type.type->s &&
mvc_create_dependency(sql, &a->type.type->base, nf->base.id, TYPE_DEPENDENCY,
SQL_PERSIST)) {
ma_destroy(sql->sa);
sql->sa = sa;
throw(SQL, "sql.create_func",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
}
}
}
- if (mvc_create_dependencies(sql, blist, nf->base.id,
!IS_PROC(f) ? FUNC_DEPENDENCY : PROC_DEPENDENCY)) {
+ if (mvc_create_dependencies(sql, blist, nf->base.id,
!IS_PROC(f) ? FUNC_DEPENDENCY : PROC_DEPENDENCY, SQL_PERSIST)) {
ma_destroy(sql->sa);
sql->sa = sa;
throw(SQL, "sql.create_func", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
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
@@ -218,6 +218,20 @@ check_sys_tables(Client c, mvc *m, sql_s
if (needsystabfix)
return sql_fix_system_tables(c, m);
}
+ {
+ res_table *output = NULL;
+ err = SQLstatementIntern(c, "select * from sys.args where id
between 2000 and 2171;\n", "update", true, false, &output);
+ if (err)
+ return err;
+ BAT *b = BATdescriptor(output->cols[0].b);
+ res_table_destroy(output);
+ if (b == NULL)
+ throw(SQL, "sql.catalog", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ bool needsystabfix = BATcount(b) > 0;
+ BBPunfix(b->batCacheid);
+ if (needsystabfix)
+ return sql_fix_system_tables(c, m);
+ }
return NULL;
}
@@ -5275,7 +5289,9 @@ sql_update_dec2025_sp1(Client c, mvc *sq
static const char query1[] = "select id from sys._tables where name =
'roles' and schema_id = 2000"
" and query = 'create view sys.roles as select id, name,
grantor from sys.auths a where a.name not in (select u.name from
sys.db_user_info u);';";
err = SQLstatementIntern(c, query1, "update", true, false, &output);
- if (err == MAL_SUCCEED && (b = BBPquickdesc(output->cols[0].b)) &&
BATcount(b) == 1) {
+ if (err)
+ return err;
+ if ((b = BBPquickdesc(output->cols[0].b)) != NULL && BATcount(b) == 1) {
static const char stmt1[] =
"DROP VIEW sys.describe_accessible_tables CASCADE;\n"
"DROP VIEW sys.roles CASCADE;\n"
@@ -5306,10 +5322,8 @@ sql_update_dec2025_sp1(Client c, mvc *sq
fflush(stdout);
err = SQLstatementIntern(c, stmt1, "update", true, false, NULL);
}
- if (output != NULL) {
- res_table_destroy(output);
- output = NULL;
- }
+ res_table_destroy(output);
+ output = NULL;
return err;
}
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -47,7 +47,7 @@ sql_create_comments(mvc *m, sql_schema *
sql_trans_create_ukey(&k, m->session->tr, t, "comments_id_pkey", pkey,
NULL);
sql_trans_create_kc(m->session->tr, k, c);
sql_trans_key_done(m->session->tr, k);
- sql_trans_create_dependency(m->session->tr, c->base.id,
k->idx->base.id, INDEX_DEPENDENCY);
+ sql_trans_create_dependency(m->session->tr, c->base.id,
k->idx->base.id, INDEX_DEPENDENCY, SQL_PERSIST);
mvc_create_column_(&c, m, t, "remark", "varchar", 65000);
sql_trans_alter_null(m->session->tr, c, 0);
}
@@ -74,7 +74,7 @@ mvc_init_create_view(mvc *m, sql_schema
r = sql_processrelation(m, r, 0, 0, 0, 0);
if (r) {
list *blist = rel_dependencies(m, r);
- if (mvc_create_dependencies(m, blist, t->base.id,
VIEW_DEPENDENCY)) {
+ if (mvc_create_dependencies(m, blist, t->base.id,
VIEW_DEPENDENCY, SQL_PERSIST)) {
ma_close(&ta_state);
(void) sql_error(m, 02, SQLSTATE(HY013)
MAL_MALLOC_FAIL);
return NULL;
@@ -1381,7 +1381,7 @@ mvc_drop_column(mvc *m, sql_table *t, sq
}
int
-mvc_create_dependency(mvc *m, sql_base *b, sqlid depend_id, sql_dependency
depend_type)
+mvc_create_dependency(mvc *m, sql_base *b, sqlid depend_id, sql_dependency
depend_type, temp_t temp)
{
int res = LOG_OK;
@@ -1390,13 +1390,13 @@ mvc_create_dependency(mvc *m, sql_base *
if (!b->new)
res = sql_trans_add_dependency(m->session->tr, b->id,
ddl);
if (res == LOG_OK)
- res = sql_trans_create_dependency(m->session->tr,
b->id, depend_id, depend_type);
+ res = sql_trans_create_dependency(m->session->tr,
b->id, depend_id, depend_type, temp);
}
return res;
}
int
-mvc_create_dependencies(mvc *m, list *blist, sqlid depend_id, sql_dependency
dep_type)
+mvc_create_dependencies(mvc *m, list *blist, sqlid depend_id, sql_dependency
dep_type, temp_t temp)
{
int res = LOG_OK;
@@ -1407,7 +1407,7 @@ mvc_create_dependencies(mvc *m, list *bl
if (!b->new) /* only add old objects to the transaction
dependency list */
res = sql_trans_add_dependency(m->session->tr,
b->id, ddl);
if (res == LOG_OK)
- res = mvc_create_dependency(m, b, depend_id,
dep_type);
+ res = mvc_create_dependency(m, b, depend_id,
dep_type, temp);
}
}
return res;
diff --git a/sql/server/sql_mvc.h b/sql/server/sql_mvc.h
--- a/sql/server/sql_mvc.h
+++ b/sql/server/sql_mvc.h
@@ -274,8 +274,8 @@ extern int mvc_create_trigger(sql_trigge
extern int mvc_drop_trigger(mvc *m, sql_schema *s, sql_trigger * tri);
/*dependency control*/
-extern int mvc_create_dependency(mvc *m, sql_base *b, sqlid depend_id,
sql_dependency depend_type);
-extern int mvc_create_dependencies(mvc *m, list *blist, sqlid depend_id,
sql_dependency dep_type);
+extern int mvc_create_dependency(mvc *m, sql_base *b, sqlid depend_id,
sql_dependency depend_type, temp_t temp);
+extern int mvc_create_dependencies(mvc *m, list *blist, sqlid depend_id,
sql_dependency dep_type, temp_t temp);
extern int mvc_check_dependency(mvc *m, sqlid id, sql_dependency type, list
*ignore_ids);
/* variable management */
diff --git a/sql/server/sql_partition.c b/sql/server/sql_partition.c
--- a/sql/server/sql_partition.c
+++ b/sql/server/sql_partition.c
@@ -308,7 +308,7 @@ bootstrap_partition_expression(mvc *sql,
nr = sql_processrelation(sql, nr, 0, instantiate, 0, 0);
if (nr) {
list *blist = rel_dependencies(sql, nr);
- if (mvc_create_dependencies(sql, blist, mt->base.id,
FUNC_DEPENDENCY))
+ if (mvc_create_dependencies(sql, blist, mt->base.id,
FUNC_DEPENDENCY, SQL_PERSIST))
msg = createException(SQL, "sql.partition",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
}
r->l = base;
diff --git a/sql/storage/bat/bat_logger.c b/sql/storage/bat/bat_logger.c
--- a/sql/storage/bat/bat_logger.c
+++ b/sql/storage/bat/bat_logger.c
@@ -1011,6 +1011,69 @@ bl_postversion(void *Store, logger *lg)
}
#endif
+#ifdef CATALOG_DEC2025
+ if (store->catalog_version <= CATALOG_DEC2025) {
+ if (tabins(lg,
+ 2067, &(msk) {false}, /* sys._tables
*/
+ /* 2168 is tmp.dependencies */
+ 2068, &(int) {2168}, /*
sys._tables.id */
+ 2069, "dependencies", /*
sys._tables.name */
+ 2070, &(int) {2114}, /*
sys._tables.schema_id */
+ 2071, str_nil, /*
sys._tables.query */
+ 2072, &(sht) {0}, /*
sys._tables.type */
+ 2073, &(bit) {TRUE}, /*
sys._tables.system */
+ 2074, &(sht) {CA_PRESERVE}, /*
sys._tables.commit_action */
+ 2075, &(sht) {0}, /*
sys._tables.access */
+ 0) != GDK_SUCCEED)
+ return GDK_FAIL;
+ if (tabins(lg,
+ 2076, &(msk) {false}, /* sys._columns
*/
+ /* 2169 is tmp.dependencies.id */
+ 2077, &(int) {2169}, /*
sys._columns.id */
+ 2078, "id", /*
sys._columns.name */
+ 2079, "int", /*
sys._columns.type */
+ 2080, &(int) {31}, /*
sys._columns.type_digits */
+ 2081, &(int) {0}, /*
sys._columns.type_scale */
+ 2082, &(int) {2168}, /*
sys._columns.table_id */
+ 2083, str_nil, /*
sys._columns.default */
+ 2084, &(bit) {TRUE}, /*
sys._columns.null */
+ 2085, &(int) {0}, /*
sys._columns.number */
+ 2086, str_nil, /*
sys._columns.storage */
+ 0) != GDK_SUCCEED)
+ return GDK_FAIL;
+ if (tabins(lg,
+ 2076, &(msk) {false}, /* sys._columns
*/
+ /* 2170 is tmp.dependencies.depend_id */
+ 2077, &(int) {2170}, /*
sys._columns.id */
+ 2078, "depend_id", /*
sys._columns.name */
+ 2079, "int", /*
sys._columns.type */
+ 2080, &(int) {31}, /*
sys._columns.type_digits */
+ 2081, &(int) {0}, /*
sys._columns.type_scale */
+ 2082, &(int) {2168}, /*
sys._columns.table_id */
+ 2083, str_nil, /*
sys._columns.default */
+ 2084, &(bit) {TRUE}, /*
sys._columns.null */
+ 2085, &(int) {1}, /*
sys._columns.number */
+ 2086, str_nil, /*
sys._columns.storage */
+ 0) != GDK_SUCCEED)
+ return GDK_FAIL;
+ if (tabins(lg,
+ 2076, &(msk) {false}, /* sys._columns
*/
+ /* 2171 is tmp.dependencies.depend_type */
+ 2077, &(int) {2171}, /*
sys._columns.id */
+ 2078, "depend_type", /*
sys._columns.name */
+ 2079, "smallint", /*
sys._columns.type */
+ 2080, &(int) {15}, /*
sys._columns.type_digits */
+ 2081, &(int) {0}, /*
sys._columns.type_scale */
+ 2082, &(int) {2168}, /*
sys._columns.table_id */
+ 2083, str_nil, /*
sys._columns.default */
+ 2084, &(bit) {TRUE}, /*
sys._columns.null */
+ 2085, &(int) {2}, /*
sys._columns.number */
+ 2086, str_nil, /*
sys._columns.storage */
+ 0) != GDK_SUCCEED)
+ return GDK_FAIL;
+ }
+#endif
+
return GDK_SUCCEED;
}
diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -909,7 +909,7 @@ os_add_(objectset *os, struct sql_trans
if (os->destroy)
os->destroy(os->store, ov->b);
_DELETE(ov);
- TRC_WARNING(SQL_STORE, "%s" "if (!os->concurrent &&
os_has_changes(os, tr)) { /* for object sets without concurrent support,
conflict if concurrent changes are there */", __func__);
+ TRC_WARNING(SQL_STORE, "if (!os->concurrent &&
os_has_changes(os, tr)) { /* for object sets without concurrent support,
conflict if concurrent changes are there */");
return -3; /* conflict */
}
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -441,7 +441,7 @@ extern int sql_trans_begin(sql_session *
extern int sql_trans_end(sql_session *s, int commit /* rollback=0, or commit=1
temporaries */);
extern list* sql_trans_schema_user_dependencies(sql_trans *tr, sqlid
schema_id);
-extern int sql_trans_create_dependency(sql_trans *tr, sqlid id, sqlid
depend_id, sql_dependency depend_type);
+extern int sql_trans_create_dependency(sql_trans *tr, sqlid id, sqlid
depend_id, sql_dependency depend_type, temp_t temp);
extern int sql_trans_drop_dependencies(sql_trans *tr, sqlid depend_id);
extern int sql_trans_drop_dependency(sql_trans *tr, sqlid id, sqlid depend_id,
sql_dependency depend_type);
extern list* sql_trans_get_dependents(sql_trans *tr, sqlid id, sql_dependency
depend_type, list *ignore_ids);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -81,7 +81,7 @@ store_oldest_pending(sqlstore *store)
static inline bool
instore(sqlid id)
{
- if (id >= 2000 && id <= 2167)
+ if (id >= 2000 && id <= 2171)
return true;
return false;
}
@@ -2165,7 +2165,12 @@ store_load(sqlstore *store, allocator *p
bootstrap_create_column(tr, t, "id", 2159, "int", 31) == NULL ||
bootstrap_create_column(tr, t, "name", 2160, "varchar", 1024)
== NULL ||
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]