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]

Reply via email to