Changeset: 9d8310eb1453 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/9d8310eb1453
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/rel_predicates.c
        sql/storage/store.c
        tools/monetdbe/monetdbe.c
Branch: Jul2021
Log Message:

Don't add predicates or dml dependencies on temporary or declared tables


diffs (112 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -4365,7 +4365,7 @@ rel2bin_insert(backend *be, sql_rel *rel
        /* update predicate list */
        if (rel->r && !rel_predicates(be, rel->r))
                return NULL;
-       if (!isNew(t) && sql_trans_add_dependency_change(be->mvc->session->tr, 
t->base.id, dml) != LOG_OK)
+       if (!isNew(t) && isGlobal(t) && !isGlobalTemp(t) && 
sql_trans_add_dependency_change(be->mvc->session->tr, t->base.id, dml) != 
LOG_OK)
                return sql_error(sql, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL);
 
        if (ddl) {
@@ -5358,7 +5358,7 @@ rel2bin_update(backend *be, sql_rel *rel
                sql->cascade_action = NULL;
        if (rel->r && !rel_predicates(be, rel->r))
                return NULL;
-       if (!isNew(t) && sql_trans_add_dependency_change(be->mvc->session->tr, 
t->base.id, dml) != LOG_OK)
+       if (!isNew(t) && isGlobal(t) && !isGlobalTemp(t) && 
sql_trans_add_dependency_change(be->mvc->session->tr, t->base.id, dml) != 
LOG_OK)
                return sql_error(sql, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL);
        return cnt;
 }
@@ -5601,7 +5601,7 @@ rel2bin_delete(backend *be, sql_rel *rel
        }
        if (rel->r && !rel_predicates(be, rel->r))
                return NULL;
-       if (!isNew(t) && sql_trans_add_dependency_change(be->mvc->session->tr, 
t->base.id, dml) != LOG_OK)
+       if (!isNew(t) && isGlobal(t) && !isGlobalTemp(t) && 
sql_trans_add_dependency_change(be->mvc->session->tr, t->base.id, dml) != 
LOG_OK)
                return sql_error(sql, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL);
 
        return stdelete;
@@ -5829,7 +5829,7 @@ rel2bin_truncate(backend *be, sql_rel *r
        restart_sequences = E_ATOM_INT(n->data);
        cascade = E_ATOM_INT(n->next->data);
 
-       if (!isNew(t) && sql_trans_add_dependency_change(be->mvc->session->tr, 
t->base.id, dml) != LOG_OK)
+       if (!isNew(t) && isGlobal(t) && !isGlobalTemp(t) && 
sql_trans_add_dependency_change(be->mvc->session->tr, t->base.id, dml) != 
LOG_OK)
                return sql_error(sql, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL);
 
        truncate = sql_truncate(be, t, restart_sequences, cascade);
diff --git a/sql/backends/monet5/rel_predicates.c 
b/sql/backends/monet5/rel_predicates.c
--- a/sql/backends/monet5/rel_predicates.c
+++ b/sql/backends/monet5/rel_predicates.c
@@ -43,7 +43,7 @@ rel_find_predicates(visitor *v, sql_rel 
        if (is_basetable(rel->op)) {
                sql_table *t = rel->l;
 
-               if (!t || !rel->exps || isNew(t) || isTempTable(t))
+               if (!t || !rel->exps || isNew(t) || !isGlobal(t) || 
isGlobalTemp(t))
                        return rel;
                sql_rel *parent = v->parent;
 
@@ -93,7 +93,7 @@ rel_find_predicates(visitor *v, sql_rel 
                        /* any other case, add all predicates */
                        sql_table *t = rel->l;
 
-                       if (!t || !rel->exps || isNew(t) || isTempTable(t))
+                       if (!t || !rel->exps || isNew(t) || !isGlobal(t) || 
isGlobalTemp(t))
                                return rel;
                        for (node *n = rel->exps->h; n; n = n->next) {
                                sql_exp *e = n->data;
@@ -127,7 +127,7 @@ rel_predicates(backend *be, sql_rel *rel
 int
 add_column_predicate(backend *be, sql_column *c)
 {
-       if (be->mvc->session->level < tr_serializable)
+       if (be->mvc->session->level < tr_serializable || isNew(c) || 
!isGlobal(c->t) || isGlobalTemp(c->t))
                return LOG_OK;
        return sql_trans_add_predicate(be->mvc->session->tr, c, 0, NULL, NULL, 
false, false);
 }
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3126,7 +3126,7 @@ sql_trans_copy_key( sql_trans *tr, sql_t
                        return res;
                if (!isNew(rkey) && (res = sql_trans_add_dependency(tr, 
rkey->t->base.id, ddl))) /* this dependency is needed for merge tables */
                        return res;
-               if (!isNew(rkey) && (res = sql_trans_add_dependency(tr, 
rkey->t->base.id, dml))) /* disallow concurrent updates on other key */
+               if (!isNew(rkey) && isGlobal(rkey->t) && !isGlobalTemp(rkey->t) 
&& (res = sql_trans_add_dependency(tr, rkey->t->base.id, dml))) /* disallow 
concurrent updates on other key */
                        return res;
        }
 
@@ -3157,7 +3157,7 @@ sql_trans_copy_key( sql_trans *tr, sql_t
        /* TODO this has to be cleaned out too */
        if (!isNew(t) && (res = sql_trans_add_dependency(tr, t->base.id, ddl))) 
/* this dependency is needed for merge tables */
                return res;
-       if (!isNew(t) && (res = sql_trans_add_dependency(tr, t->base.id, dml))) 
/* disallow concurrent updates on t */
+       if (!isNew(t) && isGlobal(t) && !isGlobalTemp(t) && (res = 
sql_trans_add_dependency(tr, t->base.id, dml))) /* disallow concurrent updates 
on t */
                return res;
        if (kres)
                *kres = nk;
@@ -5776,7 +5776,8 @@ sql_trans_alter_null(sql_trans *tr, sql_
                        return res;
                dup->null = isnull;
 
-               if (!isnull && !isNew(col) && (res = 
sql_trans_add_dependency(tr, col->t->base.id, dml))) /* disallow concurrent 
updates on pt */
+               /* disallow concurrent updates on the column if not null is set 
*/
+               if (!isnull && !isNew(col) && isGlobal(col->t) && 
!isGlobalTemp(col->t) && (res = sql_trans_add_dependency(tr, col->t->base.id, 
dml)))
                        return res;
        }
        return res;
diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c
--- a/tools/monetdbe/monetdbe.c
+++ b/tools/monetdbe/monetdbe.c
@@ -2136,7 +2136,7 @@ remote_cleanup:
                goto cleanup;
        }
        /* signal an insert was made on the table */
-       if (!isNew(t) && sql_trans_add_dependency_change(m->session->tr, 
t->base.id, dml) != LOG_OK) {
+       if (!isNew(t) && isGlobal(t) && !isGlobalTemp(t) && 
sql_trans_add_dependency_change(m->session->tr, t->base.id, dml) != LOG_OK) {
                mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", 
MAL_MALLOC_FAIL);
                goto cleanup;
        }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to