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