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