Changeset: 6f4b92d06ec6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6f4b92d06ec6
Modified Files:
        sql/backends/monet5/rel_tvtree.c
Branch: nested
Log Message:

Fixes crash with parsing stmts from literal


diffs (88 lines):

diff --git a/sql/backends/monet5/rel_tvtree.c b/sql/backends/monet5/rel_tvtree.c
--- a/sql/backends/monet5/rel_tvtree.c
+++ b/sql/backends/monet5/rel_tvtree.c
@@ -96,10 +96,11 @@ tv_create(backend *be, sql_subtype *st)
 static bool
 tv_parse_values_(backend *be, tv_tree *t, sql_exp *value, stmt *left, stmt 
*sel);
 
-static bool
-append_values_from_varchar(backend *be, tv_tree *t, stmt *sl, stmt *left, stmt 
*sel, int *sid)
+static int
+append_values_from_varchar(backend *be, tv_tree *t, stmt *sl, stmt *left, stmt 
*sel)
 {
     node *n, *m;
+    int sid = 0;
 
        switch(t->tvt) {
                case TV_BASIC:
@@ -110,38 +111,34 @@ append_values_from_varchar(backend *be, 
                        else if (sl->type == st_list) {
                                stmt *sa = sl->op4.lval->h->data;
                                list_append(t->vals, sa->op1);
-
-                               // caller (self with TV_MSET/SETOF) asserts 
proper sid value
-                               (*sid)++;
                        }
-                       return true;
+                       return 1;
                case TV_COMP:
-                       for (n = t->ctl->h, m = sl->op4.lval->h; n; n = 
n->next, m = m->next, (*sid)++) {
+                       for (n = t->ctl->h, m = sl->op4.lval->h; n; n = 
n->next, m = m->next) {
                            stmt *ts = m->data;
                            assert(ts->type == st_alias);
-                               if (!append_values_from_varchar(be, n->data, 
ts->op1, left, sel, sid))
-                                       return false;
+                               append_values_from_varchar(be, n->data, 
ts->op1, left, sel);
                        }
-                       return true;
+                       return list_length(t->ctl);
                case TV_MSET:
                case TV_SETOF:
                        assert(list_length(t->ctl) == 1);
 
-                       append_values_from_varchar(be, t->ctl->h->data, sl, 
left, sel, sid);
+                       sid = append_values_from_varchar(be, t->ctl->h->data, 
sl, left, sel);
 
-                       list_append(t->msid, list_fetch(sl->op4.lval, 
(*sid)++));
+                       list_append(t->msid, list_fetch(sl->op4.lval, sid++));
                        if (t->tvt == TV_MSET)
-                               list_append(t->msnr, list_fetch(sl->op4.lval, 
(*sid)++));
-                       list_append(t->rid, list_fetch(sl->op4.lval, (*sid)++));
+                               list_append(t->msnr, list_fetch(sl->op4.lval, 
sid++));
+                       list_append(t->rid, list_fetch(sl->op4.lval, sid++));
 
-                       assert(list_length(sl->op4.lval) == *sid);
+                       assert(list_length(sl->op4.lval) == sid);
 
-                       return true;
+                       return sid;
                default:
                        assert(0);
                        break;
        }
-       return true;
+       return 0;
 }
 
 static bool
@@ -204,8 +201,7 @@ mset_value_from_literal(backend *be, tv_
 
        assert(i->type == st_list);
 
-       int sid = 0;
-       append_values_from_varchar(be, t, i, left, sel, &sid);
+       append_values_from_varchar(be, t, i, left, sel);
 
     return true;
 }
@@ -234,9 +230,7 @@ comp_value_from_literal(backend *be, tv_
        if (!i)
                return false;
 
-       // TODO: consume all the values
-       int sid = 0;
-       append_values_from_varchar(be, t, i, left, sel, &sid);
+       append_values_from_varchar(be, t, i, left, sel);
 
        return true;
 }
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to