Changeset: c1af3cfc5120 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c1af3cfc5120
Modified Files:
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
Branch: groupby-expressions
Log Message:

Add a flag for existing grouping expressions in the plan.


diffs (67 lines):

diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -694,6 +694,7 @@ mvc_create(int clientid, backend_stack s
 
        m->type = Q_PARSE;
        m->pushdown = 1;
+       m->has_groupby_expressions = false;
 
        m->result_id = 0;
        m->results = NULL;
@@ -763,6 +764,7 @@ mvc_reset(mvc *m, bstream *rs, stream *w
        m->cascade_action = NULL;
        m->type = Q_PARSE;
        m->pushdown = 1;
+       m->has_groupby_expressions = false;
 
        for(i=0;i<MAXSTATS;i++)
                m->opt_stats[i] = 0;
@@ -1645,6 +1647,7 @@ stack_push_groupby_expression(mvc *sql, 
                if(res)
                        sql->topvars++;
        }
+       sql->has_groupby_expressions = true;
        return res;
 }
 
@@ -1653,17 +1656,19 @@ stack_get_groupby_expression(mvc *sql, s
 {
        char *err = NULL, *sdef = symbol2string(sql, def, 1, &err);
 
-       if (!sdef) {
-               if (err) {
-                       (void) sql_error(sql, 02, SQLSTATE(42000) "SELECT: 
incorrect expression '%s'", err);
-                       _DELETE(err);
+       if(sql->has_groupby_expressions) {
+               if (!sdef) {
+                       if (err) {
+                               (void) sql_error(sql, 02, SQLSTATE(42000) 
"SELECT: incorrect expression '%s'", err);
+                               _DELETE(err);
+                               return NULL;
+                       }
                        return NULL;
                }
-               return NULL;
-       }
-       for (int i = sql->topvars-1; i >= 0; i--) {
-               if (!sql->vars[i].frame && sql->vars[i].exp && 
sql->vars[i].exp->token == def->token && strcmp(sql->vars[i].exp->sdef, 
sdef)==0) {
-                       return sql->vars[i].exp->exp;
+               for (int i = sql->topvars-1; i >= 0; i--) {
+                       if (!sql->vars[i].frame && sql->vars[i].exp && 
sql->vars[i].exp->token == def->token && strcmp(sql->vars[i].exp->sdef, 
sdef)==0) {
+                               return sql->vars[i].exp->exp;
+                       }
                }
        }
        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
@@ -115,6 +115,7 @@ typedef struct mvc {
        int argmax;
        struct symbol *sym;
        int no_mitosis;         /* run query without mitosis */
+       bool has_groupby_expressions;
 
        sqlid user_id;
        sqlid role_id;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to