Changeset: a0fd49ad604c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a0fd49ad604c
Modified Files:
        sql/backends/monet5/sql_execute.c
        sql/server/rel_exp.c
        sql/server/sql_mvc.h
        sql/server/sql_var.c
Branch: default
Log Message:

Added missing value extraction for stack variables. Disable value based 
optimization on the remote side, because stack variables are not yet defined, 
and also optimization is already done on the local side


diffs (78 lines):

diff --git a/sql/backends/monet5/sql_execute.c 
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -771,7 +771,7 @@ RAstatement(Client c, MalBlkPtr mb, MalS
        refs = sa_list(m->sa);
        rel = rel_read(m, *expr, &pos, refs);
        if (*opt && rel)
-               rel = sql_processrelation(m, rel, 0, 1, 1);
+               rel = sql_processrelation(m, rel, 0, 0, 0);
        if (!rel) {
                if (strlen(m->errstr) > 6 && m->errstr[5] == '!')
                        msg = createException(SQL, "RAstatement", "%s", 
m->errstr);
@@ -967,7 +967,7 @@ RAstatement2(Client cntxt, MalBlkPtr mb,
        refs = sa_list(m->sa);
        rel = rel_read(m, expr, &pos, refs);
        if (rel)
-               rel = sql_processrelation(m, rel, 0, 1, 1);
+               rel = sql_processrelation(m, rel, 0, 0, 0);
        if (!rel) {
                if (strlen(m->errstr) > 6 && m->errstr[5] == '!')
                        msg = createException(SQL, "RAstatement2", "%s", 
m->errstr);
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -565,12 +565,12 @@ exp_value(mvc *sql, sql_exp *e)
                return e->l;
        } else if (e->r) { /* param (ie not set) */
                sql_var_name *vname = (sql_var_name*) e->r;
-               sql_var *var;
 
                assert(e->flag != 0 || vname->sname); /* global variables must 
have a schema */
-               if (e->flag == 0 && (var = find_global_var(sql, 
mvc_bind_schema(sql, vname->sname), vname->name))) /* global variable */
+               sql_var *var = e->flag == 0 ? find_global_var(sql, 
mvc_bind_schema(sql, vname->sname), vname->name) :
+                                                                         
stack_find_var_at_level(sql, vname->name, e->flag);
+               if (var)
                        return &(var->var);
-               return NULL;
        }
        return NULL;
 }
diff --git a/sql/server/sql_mvc.h b/sql/server/sql_mvc.h
--- a/sql/server/sql_mvc.h
+++ b/sql/server/sql_mvc.h
@@ -268,6 +268,7 @@ extern void stack_pop_until(mvc *sql, in
 
 /* find variable in the stack */
 extern sql_var *stack_find_var_frame(mvc *sql, const char *name, int *level);
+extern sql_var *stack_find_var_at_level(mvc *sql, const char *name, int level);
 extern sql_table *stack_find_table(mvc *sql, const char *name);
 extern sql_table *frame_find_table(mvc *sq, const char *name);
 extern sql_rel *stack_find_rel_view(mvc *sql, const char *name);
diff --git a/sql/server/sql_var.c b/sql/server/sql_var.c
--- a/sql/server/sql_var.c
+++ b/sql/server/sql_var.c
@@ -596,6 +596,23 @@ stack_find_var_frame(mvc *sql, const cha
        return NULL;
 }
 
+sql_var*
+stack_find_var_at_level(mvc *sql, const char *name, int level)
+{
+       for (int i = sql->topframes-1; i >= 0; i--) {
+               sql_frame *f = sql->frames[i];
+               if (f->frame_number == level && f->vars) {
+                       for (node *n = f->vars->h; n ; n = n->next) {
+                               sql_var *var = (sql_var*) n->data;
+                               assert(var->name);
+                               if (!strcmp(var->name, name))
+                                       return var;
+                       }
+               }
+       }
+       return NULL;
+}
+
 int
 stack_has_frame(mvc *sql, const char *name)
 {
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to