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

Reply via email to