Changeset: c454d4d2764f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c454d4d2764f
Modified Files:
        clients/Tests/exports.stable.out
        monetdb5/optimizer/opt_mergetable.c
        monetdb5/optimizer/opt_prelude.c
        monetdb5/optimizer/opt_prelude.h
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql_statement.c
Branch: ordered-set-aggregates
Log Message:

properly check for grouped (topn) case
in merge table don't partition if groupedfirstn is used


diffs (77 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1035,6 +1035,7 @@ const char *grant_rolesRef;
 const char *groupRef;
 const char *groupbyRef;
 const char *groupdoneRef;
+const char *groupedfirstnRef;
 const char *growRef;
 int hasSideEffects(MalBlkPtr mb, InstrPtr p, int strict);
 const char *hgeRef;
diff --git a/monetdb5/optimizer/opt_mergetable.c 
b/monetdb5/optimizer/opt_mergetable.c
--- a/monetdb5/optimizer/opt_mergetable.c
+++ b/monetdb5/optimizer/opt_mergetable.c
@@ -2317,6 +2317,8 @@ OPTmergetableImplementation(Client cntxt
                }
 
                /* pack if there is a group statement following a groupdone (ie 
aggr(distinct)) */
+               if (getModuleId(p) == algebraRef && getFunctionId(p) == 
groupedfirstnRef)
+                               groupdone = 1;
                if (getModuleId(p) == groupRef && p->argc == 5
                        && (getFunctionId(p) == subgroupRef
                                || getFunctionId(p) == subgroupdoneRef
diff --git a/monetdb5/optimizer/opt_prelude.c b/monetdb5/optimizer/opt_prelude.c
--- a/monetdb5/optimizer/opt_prelude.c
+++ b/monetdb5/optimizer/opt_prelude.c
@@ -128,6 +128,7 @@ const char *grantRef;
 const char *grant_rolesRef;
 const char *groupbyRef;
 const char *groupdoneRef;
+const char *groupedfirstnRef;
 const char *groupRef;
 const char *growRef;
 const char *hgeRef;
@@ -390,6 +391,7 @@ optimizerInit(void)
        grant_rolesRef = putName("grant_roles");
        groupbyRef = putName("groupby");
        groupdoneRef = putName("groupdone");
+       groupedfirstnRef = putName("groupedfirstn");
        groupRef = putName("group");
        growRef = putName("grow");
        hgeRef = putName("hge");
diff --git a/monetdb5/optimizer/opt_prelude.h b/monetdb5/optimizer/opt_prelude.h
--- a/monetdb5/optimizer/opt_prelude.h
+++ b/monetdb5/optimizer/opt_prelude.h
@@ -125,6 +125,7 @@ mal_export const char *grantRef;
 mal_export const char *grant_rolesRef;
 mal_export const char *groupbyRef;
 mal_export const char *groupdoneRef;
+mal_export const char *groupedfirstnRef;
 mal_export const char *groupRef;
 mal_export const char *growRef;
 mal_export const char *hgeRef;
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -4808,7 +4808,7 @@ rel2bin_topn(backend *be, sql_rel *rel, 
                                        sub = rel2bin_project(be, rl, refs, 
rel);
                        } else
                                sub = rel2bin_project(be, rl, refs, rel);
-                       if (rl->grouped && rl->r && has_partitioning(rl->r))
+                       if (rel->grouped && rl->r && has_partitioning(rl->r))
                                return sub;
                } else {
                        sub = subrel_bin(be, rl, refs);
diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -1257,7 +1257,7 @@ stmt_limit(backend *be, stmt *col, stmt 
                        topn = getDestVar(q);
                        pushInstruction(mb, q);
 
-                       q = newStmtArgs(mb, algebraRef, "groupedfirstn", 
(nr_obe*3)+6);
+                       q = newStmtArgs(mb, algebraRef, groupedfirstnRef, 
(nr_obe*3)+6);
                        if (q == NULL)
                                goto bailout;
                        q = pushArgument(mb, q, topn);
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to