Changeset: c98c858e6b4b for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c98c858e6b4b
Modified Files:
sql/backends/monet5/rel_bin.c
sql/server/rel_updates.c
Branch: default
Log Message:
cleanup, ie use list_fetch instead of local copies (of nth)
diffs (192 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
@@ -2760,18 +2760,6 @@ sql_parse(mvc *m, sql_allocator *sa, cha
}
static stmt *
-nth( list *l, int n)
-{
- int i;
- node *m;
-
- for (i=0, m = l->h; i<n && m; i++, m = m->next) ;
- if (m)
- return m->data;
- return NULL;
-}
-
-static stmt *
stmt_selectnonil( mvc *sql, stmt *col, stmt *s )
{
sql_subtype *t = tail_type(col);
@@ -2798,7 +2786,7 @@ insert_check_ukey(mvc *sql, list *insert
if (list_length(k->columns) > 1) {
node *m;
- stmt *s, *ins = nth(inserts, 0)->op1;
+ stmt *s = list_fetch(inserts, 0), *ins = s->op1;
sql_subaggr *sum;
stmt *ssum = NULL;
stmt *col = NULL;
@@ -2811,13 +2799,14 @@ insert_check_ukey(mvc *sql, list *insert
s = stmt_uselect(sql->sa, stmt_idx(sql, k->idx,
dels), idx_inserts, cmp_equal, s);
for (m = k->columns->h; m; m = m->next) {
sql_kc *c = m->data;
+ stmt *cs = list_fetch(inserts, c->c->colnr);
col = stmt_col(sql, c->c, dels);
if ((k->type == ukey) && stmt_has_null(col)) {
stmt *nn = stmt_selectnonil(sql, col,
s);
- s = stmt_uselect( sql->sa, col,
nth(inserts, c->c->colnr)->op1, cmp_equal, nn);
+ s = stmt_uselect( sql->sa, col,
cs->op1, cmp_equal, nn);
} else {
- s = stmt_uselect( sql->sa, col,
nth(inserts, c->c->colnr)->op1, cmp_equal, s);
+ s = stmt_uselect( sql->sa, col,
cs->op1, cmp_equal, s);
}
}
} else {
@@ -2829,10 +2818,11 @@ insert_check_ukey(mvc *sql, list *insert
}
for (m = k->columns->h; m; m = m->next) {
sql_kc *c = m->data;
+ stmt *cs = list_fetch(inserts, c->c->colnr);
col = stmt_col(sql, c->c, dels);
list_append(lje, col);
- list_append(rje, nth(inserts,
c->c->colnr)->op1);
+ list_append(rje, cs->op1);
}
s = releqjoin(sql, lje, rje, 1 /* hash used */,
cmp_equal);
s = stmt_result(sql->sa, s, 0);
@@ -2848,11 +2838,12 @@ insert_check_ukey(mvc *sql, list *insert
for (m = k->columns->h; m; m = m->next) {
sql_kc *c = m->data;
stmt *orderby;
+ stmt *cs = list_fetch(inserts, c->c->colnr);
if (orderby_grp)
- orderby = stmt_reorder(sql->sa,
nth(inserts, c->c->colnr)->op1, 1, orderby_ids, orderby_grp);
+ orderby = stmt_reorder(sql->sa,
cs->op1, 1, orderby_ids, orderby_grp);
else
- orderby = stmt_order(sql->sa,
nth(inserts, c->c->colnr)->op1, 1);
+ orderby = stmt_order(sql->sa, cs->op1,
1);
orderby_ids = stmt_result(sql->sa, orderby, 1);
orderby_grp = stmt_result(sql->sa, orderby, 2);
}
@@ -2874,7 +2865,7 @@ insert_check_ukey(mvc *sql, list *insert
res = stmt_exception(sql->sa, s, msg, 00001);
} else { /* single column key */
sql_kc *c = k->columns->h->data;
- stmt *s, *h = nth(inserts, c->c->colnr)->op1;
+ stmt *s = list_fetch(inserts, c->c->colnr), *h = s->op1;
s = stmt_col(sql, c->c, dels);
if ((k->type == ukey) && stmt_has_null(s)) {
@@ -2901,7 +2892,7 @@ insert_check_ukey(mvc *sql, list *insert
sql_subfunc *or = sql_bind_func_result(sql->sa,
sql->session->schema, "or", bt, bt, bt);
stmt *ssum, *ss;
- stmt *g, *ins = nth(inserts, c->c->colnr)->op1;
+ stmt *g = list_fetch(inserts, c->c->colnr), *ins =
g->op1;
/* inserted vaules may be null */
if ((k->type == ukey) && stmt_has_null(ins)) {
@@ -2935,7 +2926,7 @@ static stmt *
insert_check_fkey(mvc *sql, list *inserts, sql_key *k, stmt *idx_inserts, stmt
*pin)
{
char *msg = NULL;
- stmt *s = nth(inserts, 0)->op1;
+ stmt *cs = list_fetch(inserts, 0), *s = cs->op1;
sql_subtype *wrd = sql_bind_localtype("wrd");
sql_subaggr *cnt = sql_bind_aggr(sql->sa, sql->session->schema,
"count", NULL);
sql_subtype *bt = sql_bind_localtype("bit");
@@ -4241,11 +4232,8 @@ rel2bin_delete( mvc *sql, sql_rel *rel,
static stmt *
rel2bin_output(mvc *sql, sql_rel *rel, list *refs)
{
- node *n = rel->exps->h;
- char *tsep = sa_strdup(sql->sa, E_ATOM_STRING(n->data));
- char *rsep = sa_strdup(sql->sa, E_ATOM_STRING(n->next->data));
- char *ssep = sa_strdup(sql->sa, E_ATOM_STRING(n->next->next->data));
- char *ns = sa_strdup(sql->sa,
E_ATOM_STRING(n->next->next->next->data));
+ node *n;
+ char *tsep, *rsep, *ssep, *ns;
char *fn = NULL;
stmt *s = NULL, *fns = NULL;
list *slist = sa_list(sql->sa);
@@ -4255,6 +4243,16 @@ rel2bin_output(mvc *sql, sql_rel *rel, l
if (!s)
return NULL;
+ if (!rel->exps){ /* rows affacted */
+ list_append(slist, stmt_affected_rows(sql->sa, s));
+ return stmt_list(sql->sa, slist);
+ }
+ n = rel->exps->h;
+ tsep = sa_strdup(sql->sa, E_ATOM_STRING(n->data));
+ rsep = sa_strdup(sql->sa, E_ATOM_STRING(n->next->data));
+ ssep = sa_strdup(sql->sa, E_ATOM_STRING(n->next->next->data));
+ ns = sa_strdup(sql->sa, E_ATOM_STRING(n->next->next->next->data));
+
if (n->next->next->next->next) {
fn = E_ATOM_STRING(n->next->next->next->next->data);
fns = stmt_atom_string(sql->sa, sa_strdup(sql->sa, fn));
diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c
--- a/sql/server/rel_updates.c
+++ b/sql/server/rel_updates.c
@@ -25,18 +25,6 @@
#include "sql_privileges.h"
static sql_exp *
-nth( list *l, int n)
-{
- int i;
- node *m;
-
- for (i=0, m = l->h; i<n && m; i++, m = m->next) ;
- if (m)
- return m->data;
- return NULL;
-}
-
-static sql_exp *
insert_value(mvc *sql, sql_column *c, sql_rel **r, symbol *s)
{
if (s->token == SQL_NULL) {
@@ -129,7 +117,7 @@ rel_insert_hash_idx(mvc *sql, sql_idx *i
wrd = sql_bind_localtype("wrd");
for (m = i->columns->h; m; m = m->next) {
sql_kc *c = m->data;
- sql_exp *e = nth(get_inserts(inserts), c->c->colnr);
+ sql_exp *e = list_fetch(get_inserts(inserts), c->c->colnr);
if (h && i->type == hash_idx) {
list *exps = new_exp_list(sql->sa);
@@ -189,7 +177,7 @@ rel_insert_join_idx(mvc *sql, sql_idx *i
sql_kc *c = m->data;
sql_kc *rc = o->data;
sql_subfunc *isnil = sql_bind_func(sql->sa,
sql->session->schema, "isnull", &c->c->type, NULL, F_FUNC);
- sql_exp *_is = nth(ins->exps, c->c->colnr), *lnl, *rnl, *je;
+ sql_exp *_is = list_fetch(ins->exps, c->c->colnr), *lnl, *rnl,
*je;
sql_exp *rtc = exp_column(sql->sa, rel_name(rt),
rc->c->base.name, &rc->c->type, CARD_MULTI, rc->c->null, 0);
char *ename = exp_name(_is);
@@ -540,7 +528,7 @@ rel_update_hash_idx(mvc *sql, sql_idx *i
sql_kc *c = m->data;
sql_exp *e;
- e = nth(get_inserts(updates), c->c->colnr+1);
+ e = list_fetch(get_inserts(updates), c->c->colnr+1);
if (h && i->type == hash_idx) {
list *exps = new_exp_list(sql->sa);
@@ -632,7 +620,7 @@ rel_update_join_idx(mvc *sql, sql_idx *i
sql_kc *c = m->data;
sql_kc *rc = o->data;
sql_subfunc *isnil = sql_bind_func(sql->sa,
sql->session->schema, "isnull", &c->c->type, NULL, F_FUNC);
- sql_exp *upd = nth(get_inserts(updates), c->c->colnr + 1),
*lnl, *rnl, *je;
+ sql_exp *upd = list_fetch(get_inserts(updates), c->c->colnr +
1), *lnl, *rnl, *je;
sql_exp *rtc = exp_column(sql->sa, rel_name(rt),
rc->c->base.name, &rc->c->type, CARD_MULTI, rc->c->null, 0);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list