Changeset: 951528fbfaec for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/951528fbfaec
Modified Files:
monetdb5/optimizer/opt_postfix.c
Branch: Jul2021
Log Message:
Defensive lines. Apply postfix optimizer on joins only when 2 results are being
returned. Also removed assertion about which arguments being used. If the join
is about to be removed by deadcode optimizer, then both returned values won't
be used
diffs (20 lines):
diff --git a/monetdb5/optimizer/opt_postfix.c b/monetdb5/optimizer/opt_postfix.c
--- a/monetdb5/optimizer/opt_postfix.c
+++ b/monetdb5/optimizer/opt_postfix.c
@@ -32,7 +32,7 @@ OPTpostfixImplementation(Client cntxt, M
for( i = 0; i< slimit; i++){
/* POSTFIX ACTION FOR THE JOIN CASE */
p= getInstrPtr(mb, i);
- if ( getModuleId(p) == algebraRef) {
+ if ( getModuleId(p) == algebraRef && p->retc == 2) {
if ( getFunctionId(p) == leftjoinRef ||
getFunctionId(p) == outerjoinRef ||
getFunctionId(p) == bandjoinRef ||
getFunctionId(p) == rangejoinRef ||
getFunctionId(p) == likejoinRef) {
@@ -47,7 +47,6 @@ OPTpostfixImplementation(Client cntxt, M
int is_first_ret_not_used = getVarEolife(mb,
getArg(p, p->retc -2)) == i;
int is_second_ret_not_used = getVarEolife(mb,
getArg(p, p->retc -1)) == i;
- assert(!is_first_ret_not_used ||
!is_second_ret_not_used);
if ( (is_first_ret_not_used ||
is_second_ret_not_used) && getFunctionId(p) == semijoinRef) {
delArgument(p, is_second_ret_not_used ?
p->retc -1 : p->retc -2);
/* semijoin with a single output is
called intersect */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list