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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list