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 -- [email protected]
To unsubscribe send an email to [email protected]