Changeset: 87df8ec9d2ce for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=87df8ec9d2ce Modified Files: sql/backends/monet5/sql.c sql/storage/bat/bat_storage.c Branch: Jul2015 Log Message:
added more defensive code to handle typos for the remote cases. see bugs 3778 and 3754 diffs (112 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 @@ -1762,6 +1762,7 @@ mvc_bind_wrap(Client cntxt, MalBlkPtr mb int upd = (pci->argc == 7 || pci->argc == 9); BAT *b = NULL, *bn; bat *bid = getArgReference_bat(stk, pci, 0); + int coltype = getColumnType(getArgType(mb, pci, 0)); mvc *m = NULL; str msg; str *sname = getArgReference_str(stk, pci, 2 + upd); @@ -1774,6 +1775,8 @@ mvc_bind_wrap(Client cntxt, MalBlkPtr mb if ((msg = checkSQLContext(cntxt)) != NULL) return msg; b = mvc_bind(m, *sname, *tname, *cname, *access); + if (b && b->ttype != coltype) + throw(SQL,"sql.bind","tail type mismatch"); if (b) { if (pci->argc == (8 + upd) && getArgType(mb, pci, 6 + upd) == TYPE_int) { BUN cnt = BATcount(b), psz; @@ -1857,6 +1860,7 @@ mvc_bind_idxbat_wrap(Client cntxt, MalBl int upd = (pci->argc == 7 || pci->argc == 9); BAT *b = NULL, *bn; bat *bid = getArgReference_bat(stk, pci, 0); + int coltype = getColumnType(getArgType(mb, pci, 0)); mvc *m = NULL; str msg; str *sname = getArgReference_str(stk, pci, 2 + upd); @@ -1869,6 +1873,8 @@ mvc_bind_idxbat_wrap(Client cntxt, MalBl if ((msg = checkSQLContext(cntxt)) != NULL) return msg; b = mvc_bind_idxbat(m, *sname, *tname, *iname, *access); + if (b && b->ttype != coltype) + throw(SQL,"sql.bind","tail type mismatch"); if (b) { if (pci->argc == (8 + upd) && getArgType(mb, pci, 6 + upd) == TYPE_int) { BUN cnt = BATcount(b), psz; diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c --- a/sql/storage/bat/bat_storage.c +++ b/sql/storage/bat/bat_storage.c @@ -172,6 +172,8 @@ delta_bind_bat( sql_delta *bat, int acce static BAT * bind_col(sql_trans *tr, sql_column *c, int access) { + if (!isTable(c->t)) + return NULL; if (!c->data) { sql_column *oc = tr_find_column(tr->parent, c); c->data = timestamp_delta(oc->data, tr->stime); @@ -186,6 +188,8 @@ bind_col(sql_trans *tr, sql_column *c, i static BAT * bind_idx(sql_trans *tr, sql_idx * i, int access) { + if (!isTable(i->t)) + return NULL; if (!i->data) { sql_idx *oi = tr_find_idx(tr->parent, i); i->data = timestamp_delta(oi->data, tr->stime); @@ -774,6 +778,8 @@ count_col(sql_trans *tr, sql_column *c, { sql_delta *b; + if (!isTable(c->t)) + return 0; if (!c->data) { sql_column *oc = tr_find_column(tr->parent, c); c->data = timestamp_delta(oc->data, tr->stime); @@ -792,6 +798,8 @@ dcount_col(sql_trans *tr, sql_column *c) { sql_delta *b; + if (!isTable(c->t)) + return 0; if (!c->data) { sql_column *oc = tr_find_column(tr->parent, c); c->data = timestamp_delta(oc->data, tr->stime); @@ -825,6 +833,8 @@ count_idx(sql_trans *tr, sql_idx *i, int { sql_delta *b; + if (!isTable(i->t)) + return 0; if (!i->data) { sql_idx *oi = tr_find_idx(tr->parent, i); i->data = timestamp_delta(oi->data, tr->stime); @@ -843,6 +853,8 @@ count_del(sql_trans *tr, sql_table *t) { sql_dbat *d; + if (!isTable(t)) + return 0; if (!t->data) { sql_table *ot = tr_find_table(tr->parent, t); t->data = timestamp_dbat(ot->data, tr->stime); @@ -873,7 +885,7 @@ sorted_col(sql_trans *tr, sql_column *co int sorted = 0; /* fallback to central bat */ - if (!col->t->s) + if (!isTable(col->t) || !col->t->s) return 0; if (tr && tr->parent && !col->data) col = find_col(tr->parent, col->t->s->base.name, col->t->base.name, col->base.name); @@ -892,6 +904,8 @@ double_elim_col(sql_trans *tr, sql_colum { int de = 0; + if (!isTable(col->t) || !col->t->s) + return 0; /* fallback to central bat */ if (tr && tr->parent && !col->data) { col = find_col(tr->parent, _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list