Changeset: d1e40d670569 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d1e40d670569
Modified Files:
sql/backends/monet5/rel_bin.c
Branch: pushcands
Log Message:
More cleanup
diffs (truncated from 341 to 300 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
@@ -4647,7 +4647,6 @@ sql_delete_set_Fkeys(backend *be, sql_ke
{
mvc *sql = be->mvc;
sql_trans *tr = sql->session->tr;
- list *l = NULL;
int len = 0;
node *m, *o;
sql_key *rk = (sql_key*)os_find_id(tr->cat->objects, tr,
((sql_fkey*)k)->rkey);
@@ -4680,9 +4679,9 @@ sql_delete_set_Fkeys(backend *be, sql_ke
new_updates[fc->c->colnr] = upd;
}
- if ((l = sql_update(be, t, ftids, new_updates)) == NULL)
+ if (!sql_update(be, t, ftids, new_updates))
return NULL;
- return stmt_list(be, l);
+ return ftids; /* return something to show it succeeded */
}
static stmt*
@@ -4743,7 +4742,7 @@ sql_update_cascade_Fkeys(backend *be, sq
if ((l = sql_update(be, t, rows, new_updates)) == NULL)
return NULL;
- return stmt_list(be, l);
+ return utids; /* return something to say it succeeded */
}
static int
@@ -4774,32 +4773,29 @@ cascade_ukey(backend *be, stmt **updates
case ACT_CASCADE:
if (!sql_update_cascade_Fkeys(be, fk, tids,
updates, ((sql_fkey*)fk)->on_update)) {
list_destroy(keys);
- return -1;
+ return 0;
}
break;
default: /*RESTRICT*/
if (!join_updated_pkey(be, fk, tids, updates)) {
list_destroy(keys);
- return -1;
+ return 0;
}
}
}
list_destroy(keys);
}
- return 0;
+ return 1;
}
static void
-sql_update_check_key(backend *be, stmt **updates, sql_key *k, stmt *tids, stmt
*idx_updates, int updcol, list *l, rel_bin_stmt *pup)
+sql_update_check_key(backend *be, stmt **updates, sql_key *k, stmt *tids, stmt
*idx_updates, int updcol, rel_bin_stmt *pup)
{
- stmt *ckeys;
-
if (k->type == pkey || k->type == ukey) {
- ckeys = update_check_ukey(be, updates, k, tids, idx_updates,
updcol);
+ (void) update_check_ukey(be, updates, k, tids, idx_updates,
updcol);
} else { /* foreign keys */
- ckeys = update_check_fkey(be, updates, k, tids, idx_updates,
updcol, pup);
- }
- list_append(l, ckeys);
+ (void) update_check_fkey(be, updates, k, tids, idx_updates,
updcol, pup);
+ }
}
static stmt *
@@ -4901,7 +4897,7 @@ cascade_updates(backend *be, sql_table *
node *n;
if (!ol_length(t->idxs))
- return 0;
+ return 1;
for (n = ol_first_node(t->idxs); n; n = n->next) {
sql_idx *i = n->data;
@@ -4921,17 +4917,17 @@ cascade_updates(backend *be, sql_table *
*local_id = i->key->base.id;
list_append(sql->cascade_action, local_id);
if (k->type == pkey || k->type == ukey) {
- if (cascade_ukey(be, updates, k, rows))
- return -1;
+ if (!cascade_ukey(be, updates, k, rows))
+ return 0;
}
}
}
}
- return 0;
+ return 1;
}
static list *
-update_idxs_and_check_keys(backend *be, sql_table *t, stmt *rows, stmt
**updates, list *l, rel_bin_stmt *pup)
+update_idxs_and_check_keys(backend *be, sql_table *t, stmt *rows, stmt
**updates, rel_bin_stmt *pup)
{
mvc *sql = be->mvc;
node *n;
@@ -4961,7 +4957,7 @@ update_idxs_and_check_keys(backend *be,
return NULL;
}
if (i->key)
- sql_update_check_key(be, updates, i->key, rows, is,
updcol, l, pup);
+ sql_update_check_key(be, updates, i->key, rows, is,
updcol, pup);
if (is)
list_append(idx_updates, stmt_update_idx(be, i, rows,
is));
}
@@ -5082,14 +5078,13 @@ sql_update(backend *be, sql_table *t, st
mvc *sql = be->mvc;
list *idx_updates = NULL;
int i, nr_cols = ol_length(t->columns);
- list *l = sa_list(sql->sa);
node *n;
if (!be->first_statement_generated)
sql_update_check_null(be, /*(be->cur_append && t->p) ? t->p :*/
t, updates);
/* check keys + get idx */
- idx_updates = update_idxs_and_check_keys(be, t, rows, updates, l, NULL);
+ idx_updates = update_idxs_and_check_keys(be, t, rows, updates, NULL);
if (!idx_updates) {
assert(0);
return sql_error(sql, 02, SQLSTATE(42000) "UPDATE: failed to
update indexes for table '%s'", t->base.name);
@@ -5104,9 +5099,9 @@ sql_update(backend *be, sql_table *t, st
sql_column *c = n->data;
if (updates[i])
- list_append(l, stmt_update_col(be, c, rows,
updates[i]));
- }
- if (cascade_updates(be, t, rows, updates))
+ stmt_update_col(be, c, rows, updates[i]);
+ }
+ if (!cascade_updates(be, t, rows, updates))
return sql_error(sql, 02, SQLSTATE(42000) "UPDATE: cascade
failed for table '%s'", t->base.name);
/* after */
@@ -5114,7 +5109,7 @@ sql_update(backend *be, sql_table *t, st
return sql_error(sql, 02, SQLSTATE(27000) "UPDATE: triggers
failed for table '%s'", t->base.name);
/* cascade ?? */
- return l;
+ return idx_updates; /* return something to show it succeeded */
}
/* updates with empty list is alter with create idx or keys */
@@ -5124,7 +5119,6 @@ rel2bin_update(backend *be, sql_rel *rel
mvc *sql = be->mvc;
rel_bin_stmt *update = NULL, *ddl = NULL, *pup = NULL;
stmt **updates = NULL, *tids, *ret;
- list *l = sa_list(sql->sa);
int nr_cols, updcol, idx_ups = 0;
node *m;
sql_rel *tr = rel->l, *prel = rel->r;
@@ -5193,9 +5187,9 @@ rel2bin_update(backend *be, sql_rel *rel
update_idx = NULL;
}
if (i->key)
- sql_update_check_key(be,
(updcol>=0)?updates:NULL, i->key, tids, update_idx, updcol, l, pup);
+ sql_update_check_key(be,
(updcol>=0)?updates:NULL, i->key, tids, update_idx, updcol, pup);
if (is)
- list_append(l, stmt_update_idx(be, i, tids,
is));
+ stmt_update_idx(be, i, tids, is);
}
}
@@ -5211,10 +5205,10 @@ rel2bin_update(backend *be, sql_rel *rel
sql_column *c = find_sql_column(t, exp_name(ce));
if (c)
- list_append(l, stmt_update_col(be, c, tids,
updates[c->colnr]));
- }
-
- if (cascade_updates(be, t, tids, updates)) {
+ stmt_update_col(be, c, tids, updates[c->colnr]);
+ }
+
+ if (!cascade_updates(be, t, tids, updates)) {
sql->cascade_action = NULL;
return sql_error(sql, 02, SQLSTATE(42000) "UPDATE: cascade
failed for table '%s'", t->base.name);
}
@@ -5228,15 +5222,14 @@ rel2bin_update(backend *be, sql_rel *rel
sql->cascade_action = NULL;
if (ddl) {
- list_prepend(l, ddl);
+ ret = (stmt*) ddl;
} else {
ret = stmt_aggr(be, tids, NULL, NULL, sql_bind_func(sql, "sys",
"count", sql_bind_localtype("void"), NULL, F_AGGR), 1, 0, 1);
if (be->cur_append) /* building the total number of rows
affected across all tables */
ret->nr = add_to_merge_partitions_accumulator(be,
ret->nr);
- list_append(l, ret);
- }
-
- return create_rel_bin_stmt(sql->sa, l, NULL, NULL, NULL, NULL);
+ }
+
+ return create_rel_bin_stmt(sql->sa, list_append(sa_list(sql->sa), ret),
NULL, NULL, NULL, NULL);
}
static int
@@ -5310,8 +5303,8 @@ sql_delete_cascade_Fkeys(backend *be, sq
return sql_delete(be, t, ftids);
}
-static void
-sql_delete_ukey(backend *be, stmt *utids /* deleted tids from ukey table */,
sql_key *k, list *l, char* which, int cascade)
+static int
+sql_delete_ukey(backend *be, stmt *utids /* deleted tids from ukey table */,
sql_key *k, char* which, int cascade)
{
mvc *sql = be->mvc;
sql_subtype *lng = sql_bind_localtype("lng");
@@ -5339,36 +5332,36 @@ sql_delete_ukey(backend *be, stmt *utids
s = stmt_result(be, s, 0);
tids = stmt_project(be, s, tids);
if (cascade) { /* for truncate statements with the
cascade option */
- s = sql_delete_cascade_Fkeys(be, fk, tids);
- list_prepend(l, s);
+ if (!sql_delete_cascade_Fkeys(be, fk, tids))
+ return 0;
} else {
switch (((sql_fkey*)fk)->on_delete) {
case ACT_NO_ACTION:
break;
case ACT_SET_NULL:
case ACT_SET_DEFAULT:
- s = sql_delete_set_Fkeys(be,
fk, tids, ((sql_fkey*)fk)->on_delete);
- list_prepend(l, s);
+ if (!sql_delete_set_Fkeys(be,
fk, tids, ((sql_fkey*)fk)->on_delete))
+ return 0;
break;
case ACT_CASCADE:
- s =
sql_delete_cascade_Fkeys(be, fk, tids);
- list_prepend(l, s);
+ if
(!sql_delete_cascade_Fkeys(be, fk, tids))
+ return 0;
break;
default: /*RESTRICT*/
/* The overlap between deleted
primaries and foreign should be empty */
s = stmt_binop(be,
stmt_aggr(be, tids, NULL, NULL, cnt, 1, 0, 1), stmt_atom_lng(be, 0), NULL, ne);
msg = sa_message(sql->sa,
SQLSTATE(40002) "%s: FOREIGN KEY constraint '%s.%s' violated", which,
fk->t->base.name, fk->base.name);
s = stmt_exception(be, s, msg,
00001);
- list_prepend(l, s);
}
}
}
list_destroy(keys);
}
+ return 1;
}
static int
-sql_delete_keys(backend *be, sql_table *t, stmt *rows, list *l, char* which,
int cascade)
+sql_delete_keys(backend *be, sql_table *t, stmt *rows, char* which, int
cascade)
{
mvc *sql = be->mvc;
int res = 1;
@@ -5388,7 +5381,8 @@ sql_delete_keys(backend *be, sql_table *
*local_id = k->base.id;
list_append(sql->cascade_action, local_id);
- sql_delete_ukey(be, rows, k, l, which, cascade);
+ if (!sql_delete_ukey(be, rows, k, which,
cascade))
+ return 0;
}
}
}
@@ -5399,9 +5393,7 @@ static stmt *
sql_delete(backend *be, sql_table *t, stmt *rows)
{
mvc *sql = be->mvc;
- stmt *v = NULL, *s = NULL;
- list *l = sa_list(sql->sa);
- stmt **deleted_cols = NULL;
+ stmt *v = NULL, *s = NULL, **deleted_cols = NULL;
if (rows) {
v = rows;
@@ -5419,7 +5411,6 @@ sql_delete(backend *be, sql_table *t, st
stmt *s = stmt_col(be, c, v, v->partition);
deleted_cols[i] = s;
- list_append(l, s);
}
}
@@ -5427,15 +5418,13 @@ sql_delete(backend *be, sql_table *t, st
if (!sql_delete_triggers(be, t, v, deleted_cols, 0, 1, 3))
return sql_error(sql, 02, SQLSTATE(27000) "DELETE: triggers
failed for table '%s'", t->base.name);
- if (!sql_delete_keys(be, t, v, l, "DELETE", 0))
+ if (!sql_delete_keys(be, t, v, "DELETE", 0))
return sql_error(sql, 02, SQLSTATE(42000) "DELETE: failed to
delete indexes for table '%s'", t->base.name);
if (rows) {
- list_append(l, stmt_delete(be, t, rows));
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list