[prev in list] [next in list] [prev in thread] [next in thread]
List: monetdb-checkins
Subject: MonetDB: mosaic - Merge with default
From: Martin Kersten <commits+mk=cwi.nl () monetdb ! org>
Date: 2017-12-22 10:43:01
Message-ID: hg.967c2584fdea.1513939381.6315528441665844383 () monetdb-vm0 ! spin-off ! cwi ! nl
[Download RAW message or body]
Changeset: 967c2584fdea for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=967c2584fdea
Added Files:
monetdb5/optimizer/opt_postfix.c
monetdb5/optimizer/opt_postfix.h
sql/test/BugTracker-2017/Tests/createorreplace-system-func.Bug-6499.sql
sql/test/BugTracker-2017/Tests/createorreplace-system-func.Bug-6499.stable.err
sql/test/BugTracker-2017/Tests/createorreplace-system-func.Bug-6499.stable.out
sql/test/BugTracker-2017/Tests/select-in-returns-null.Bug-6491.sql
sql/test/BugTracker-2017/Tests/select-in-returns-null.Bug-6491.stable.err
sql/test/BugTracker-2017/Tests/select-in-returns-null.Bug-6491.stable.out
sql/test/BugTracker-2017/Tests/sqlitelogictest-algebra-operators.Bug-6494.stable.err
sql/test/BugTracker-2017/Tests/sqlitelogictest-algebra-operators.Bug-6494.stable.out
sql/test/BugTracker-2017/Tests/sqlitelogictest-comparisons-between-floating-points-and-NULL.Bug-6496.stable.err
sql/test/BugTracker-2017/Tests/sqlitelogictest-comparisons-between-floating-points-and-NULL.Bug-6496.stable.out
sql/test/BugTracker-2017/Tests/sqlitelogictest-hidden-alias.Bug-6495.stable.err
sql/test/BugTracker-2017/Tests/sqlitelogictest-hidden-alias.Bug-6495.stable.out
sql/test/BugTracker-2017/Tests/sqlitelogictest-min-distinct-empty-table.Bug-6493.stable.err
sql/test/BugTracker-2017/Tests/sqlitelogictest-min-distinct-empty-table.Bug-6493.stable.out
sql/test/BugTracker-2017/Tests/sqlitelogictest-not-between.Bug-6497.stable.err
sql/test/BugTracker-2017/Tests/sqlitelogictest-not-between.Bug-6497.stable.out
sql/test/BugTracker-2017/Tests/union_all_null.Bug-6487.sql
sql/test/BugTracker-2017/Tests/union_all_null.Bug-6487.stable.err
sql/test/BugTracker-2017/Tests/union_all_null.Bug-6487.stable.out
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
clients/Tests/exports.stable.out
gdk/gdk_search.c
monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
monetdb5/modules/kernel/algebra.c
monetdb5/modules/kernel/algebra.h
monetdb5/modules/kernel/algebra.mal
monetdb5/optimizer/Makefile.ag
monetdb5/optimizer/opt_deadcode.c
monetdb5/optimizer/opt_pipes.c
monetdb5/optimizer/opt_support.c
monetdb5/optimizer/opt_wrapper.c
monetdb5/optimizer/optimizer.mal
sql/backends/monet5/UDF/udf/Tests/udf-fuse.stable.out
sql/backends/monet5/UDF/udf/Tests/udf-reverse.stable.out
sql/backends/monet5/sql_scenario.c
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_upgrades.c
sql/common/sql_types.c
sql/jdbc/tests/Tests/Test_Rtimedate.stable.out
sql/server/rel_optimizer.c
sql/server/rel_psm.c
sql/server/rel_select.c
sql/server/sql_atom.c
sql/server/sql_parser.y
sql/server/sql_qc.c
sql/server/sql_qc.h
sql/server/sql_semantic.h
sql/test/BugDay_2005-10-06_2.9.3/Tests/simple_union.SF-1005596.stable.out
sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
sql/test/BugTracker-2012/Tests/null_except_null.Bug-3040.stable.out
sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.stable.err.int128
sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.stable.out
sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.stable.out.int128
sql/test/BugTracker-2014/Tests/manifold.Bug-3556.stable.out
sql/test/BugTracker-2015/Tests/crash_in_reduce_groupby.Bug-3818.stable.out.int128
sql/test/BugTracker-2016/Tests/select-in-from.Bug-6121.stable.out
sql/test/BugTracker-2017/Tests/All
sql/test/BugTracker-2017/Tests/distinct_minus_count_distinct.Bug-6296.stable.out
sql/test/BugTracker-2017/Tests/limit.Bug-6322.stable.out
sql/test/BugTracker-2017/Tests/spurious_error.Bug-6344.stable.out
sql/test/BugTracker-2017/Tests/sqlitelogictest-comparisons-between-floating-points-and-NULL.Bug-6496.sql
sql/test/BugTracker-2017/Tests/sqlitelogictest-select-in-column.Bug-6490.stable.out
sql/test/BugTracker-2017/Tests/sqllitelogistest_case.Bug-6335.stable.err
sql/test/BugTracker-2017/Tests/sqllitelogistest_case.Bug-6335.stable.out
sql/test/BugTracker-2017/Tests/type-resolution-error.Bugs-6313.stable.err
sql/test/Tests/setoptimizer.stable.out
sql/test/bugs/Tests/subselect_multiple_unionall_where_1=1-bug-sf-1005596.stable.out
sql/test/bugs/Tests/union_all-bug-sf-941788.stable.out
sql/test/mapi/Tests/sql_int128.stable.out.int128
sql/test/mergetables/Tests/mergequery.stable.out
sql/test/mergetables/Tests/sqlsmith.Bug-6480.stable.err
sql/test/mosaic/Tests/compression.stable.out
sql/test/mosaic/Tests/compressionRLE2.stable.out
sql/test/mosaic/Tests/session_exit.stable.out
sql/test/mosaic/Tests/xqueries.stable.out
sql/test/mosaic/Tests/xqueries_delta.stable.out
sql/test/remote/Tests/partition_elim.stable.out
Branch: mosaic
Log Message:
Merge with default
diffs (truncated from 2984 to 300 lines):
diff --git a/clients/Tests/MAL-signatures.stable.out \
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -83,9 +83,12 @@ Ready.
[ "aggr", "corr", "function aggr.corr(e1:bat[:sht], e2:bat[:sht]):dbl;", "", "" ]
[ "aggr", "count", "command aggr.count(b:bat[:any_1], g:bat[:oid], e:bat[:any_2], \
ignorenils:bit):bat[:lng] ", "AGGRcount3;", "" ] [ "aggr", "count", "command \
aggr.count(b:bat[:any_1], g:bat[:oid], e:bat[:any_2]):bat[:lng] \
", "AGGRcount3nils;", "Grouped count" ] +[ "aggr", "count", "command \
aggr.count(b:bat[:any], cnd:bat[:oid]):lng ", "ALGcountCND_bat;", "Return the current \
size (in number of elements) in a BAT." ] +[ "aggr", "count", "command \
aggr.count(b:bat[:any], cnd:bat[:oid], ignore_nils:bit):lng \
", "ALGcountCND_nil;", "Return the number of elements currently in a BAT \
ignores\n\t\tBUNs with nil-tail iff ignore_nils==TRUE." ] [ \
"aggr", "count", "command aggr.count(b:bat[:any]):lng ", "ALGcount_bat;", "Return the \
current size (in number of elements) in a BAT." ] [ "aggr", "count", "command \
aggr.count(b:bat[:any], ignore_nils:bit):lng ", "ALGcount_nil;", "Return the number \
of elements currently in a BAT ignores\n\t\tBUNs with nil-tail iff \
ignore_nils==TRUE." ] [ "aggr", "count_no_nil", "command \
aggr.count_no_nil(b:bat[:any_1], g:bat[:oid], e:bat[:any_2]):bat[:lng] \
", "AGGRcount3nonils;", "" ] +[ "aggr", "count_no_nil", "command \
aggr.count_no_nil(b:bat[:any_2], cnd:bat[:oid]):lng ", "ALGcountCND_no_nil;", "Return \
the number of elements currently\n\tin a BAT ignoring BUNs with nil-tail" ] [ \
"aggr", "count_no_nil", "command aggr.count_no_nil(b:bat[:any_2]):lng \
", "ALGcount_no_nil;", "Return the number of elements currently\n\tin a BAT ignoring \
BUNs with nil-tail" ] [ "aggr", "covar", "function aggr.covar(e1:bat[:bte], \
e2:bat[:bte]):dbl;", "", "" ] [ "aggr", "covar", "function aggr.covar(e1:bat[:dbl], \
e2:bat[:dbl]):dbl;", "", "" ] @@ -8271,6 +8274,8 @@ Ready.
[ "optimizer", "optimize", "pattern optimizer.optimize(mod:str, fcn:str):void \
", "QOToptimize;", "Optimize a specific operation" ] [ \
"optimizer", "orcam", "pattern optimizer.orcam(mod:str, fcn:str, targetmod:str, \
targetfcn:str):void ", "OPTorcam;", "Inverse macro, find pattern and replace with a \
function call." ] [ "optimizer", "orcam", "pattern optimizer.orcam(targetmod:str, \
targetfcn:str):void ", "OPTorcam;", "Inverse macro processor for current function" ] \
+[ "optimizer", "postfix", "pattern optimizer.postfix():str ", "OPTwrapper;", "" ] +[ \
"optimizer", "postfix", "pattern optimizer.postfix(mod:str, fcn:str):str \
", "OPTwrapper;", "Postfix the plan,e.g. pushing projections" ] [ \
"optimizer", "prelude", "pattern optimizer.prelude():void \
", "optimizer_prelude;", "Initialize the optimizer" ] [ \
"optimizer", "profiler", "pattern optimizer.profiler():str ", "OPTwrapper;", "" ] [ \
"optimizer", "profiler", "pattern optimizer.profiler(mod:str, fcn:str):str \
", "OPTwrapper;", "Collect properties for the profiler" ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 \
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -90,9 +90,12 @@ Ready.
[ "aggr", "corr", "function aggr.corr(e1:bat[:sht], e2:bat[:sht]):dbl;", "", "" ]
[ "aggr", "count", "command aggr.count(b:bat[:any_1], g:bat[:oid], e:bat[:any_2], \
ignorenils:bit):bat[:lng] ", "AGGRcount3;", "" ] [ "aggr", "count", "command \
aggr.count(b:bat[:any_1], g:bat[:oid], e:bat[:any_2]):bat[:lng] \
", "AGGRcount3nils;", "Grouped count" ] +[ "aggr", "count", "command \
aggr.count(b:bat[:any], cnd:bat[:oid]):lng ", "ALGcountCND_bat;", "Return the current \
size (in number of elements) in a BAT." ] +[ "aggr", "count", "command \
aggr.count(b:bat[:any], cnd:bat[:oid], ignore_nils:bit):lng \
", "ALGcountCND_nil;", "Return the number of elements currently in a BAT \
ignores\n\t\tBUNs with nil-tail iff ignore_nils==TRUE." ] [ \
"aggr", "count", "command aggr.count(b:bat[:any]):lng ", "ALGcount_bat;", "Return the \
current size (in number of elements) in a BAT." ] [ "aggr", "count", "command \
aggr.count(b:bat[:any], ignore_nils:bit):lng ", "ALGcount_nil;", "Return the number \
of elements currently in a BAT ignores\n\t\tBUNs with nil-tail iff \
ignore_nils==TRUE." ] [ "aggr", "count_no_nil", "command \
aggr.count_no_nil(b:bat[:any_1], g:bat[:oid], e:bat[:any_2]):bat[:lng] \
", "AGGRcount3nonils;", "" ] +[ "aggr", "count_no_nil", "command \
aggr.count_no_nil(b:bat[:any_2], cnd:bat[:oid]):lng ", "ALGcountCND_no_nil;", "Return \
the number of elements currently\n\tin a BAT ignoring BUNs with nil-tail" ] [ \
"aggr", "count_no_nil", "command aggr.count_no_nil(b:bat[:any_2]):lng \
", "ALGcount_no_nil;", "Return the number of elements currently\n\tin a BAT ignoring \
BUNs with nil-tail" ] [ "aggr", "covar", "function aggr.covar(e1:bat[:bte], \
e2:bat[:bte]):dbl;", "", "" ] [ "aggr", "covar", "function aggr.covar(e1:bat[:dbl], \
e2:bat[:dbl]):dbl;", "", "" ] @@ -10633,6 +10636,8 @@ Ready.
[ "optimizer", "optimize", "pattern optimizer.optimize(mod:str, fcn:str):void \
", "QOToptimize;", "Optimize a specific operation" ] [ \
"optimizer", "orcam", "pattern optimizer.orcam(mod:str, fcn:str, targetmod:str, \
targetfcn:str):void ", "OPTorcam;", "Inverse macro, find pattern and replace with a \
function call." ] [ "optimizer", "orcam", "pattern optimizer.orcam(targetmod:str, \
targetfcn:str):void ", "OPTorcam;", "Inverse macro processor for current function" ] \
+[ "optimizer", "postfix", "pattern optimizer.postfix():str ", "OPTwrapper;", "" ] +[ \
"optimizer", "postfix", "pattern optimizer.postfix(mod:str, fcn:str):str \
", "OPTwrapper;", "Postfix the plan,e.g. pushing projections" ] [ \
"optimizer", "prelude", "pattern optimizer.prelude():void \
", "optimizer_prelude;", "Initialize the optimizer" ] [ \
"optimizer", "profiler", "pattern optimizer.profiler():str ", "OPTwrapper;", "" ] [ \
"optimizer", "profiler", "pattern optimizer.profiler(mod:str, fcn:str):str \
", "OPTwrapper;", "Collect properties for the profiler" ]
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
@@ -693,6 +693,9 @@ str ALARMusec(lng *ret);
str ALGbandjoin(bat *r1, bat *r2, const bat *lid, const bat *rid, const bat *slid, \
const bat *srid, const void *low, const void *high, const bit *li, const bit *hi, \
const lng *estimate); str ALGcard(lng *result, const bat *bid);
str ALGcopy(bat *result, const bat *bid);
+str ALGcountCND_bat(lng *result, const bat *bid, const bat *cnd);
+str ALGcountCND_nil(lng *result, const bat *bid, const bat *cnd, const bit \
*ignore_nils); +str ALGcountCND_no_nil(lng *result, const bat *bid, const bat *cnd);
str ALGcount_bat(lng *result, const bat *bid);
str ALGcount_nil(lng *result, const bat *bid, const bit *ignore_nils);
str ALGcount_no_nil(lng *result, const bat *bid);
@@ -1710,6 +1713,7 @@ str OPTmultiplexSimple(Client cntxt, Mal
str OPToltpImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
str OPTorcam(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
str OPTorcamImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
+str OPTpostfixImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
str OPTprofilerImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr \
p); str OPTprojectionpathImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, \
InstrPtr p); str OPTpushselectImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr \
stk, InstrPtr pci);
diff --git a/gdk/gdk_search.c b/gdk/gdk_search.c
--- a/gdk/gdk_search.c
+++ b/gdk/gdk_search.c
@@ -458,8 +458,6 @@ SORTfndlast(BAT *b, const void *v)
}
if (b->ttype == TYPE_void) {
assert(is_oid_nil(b->tseqbase));
- if (is_oid_nil(*(const oid *) v))
- return 0;
return BATcount(b);
}
return binsearch(NULL, 0, b->ttype, Tloc(b, 0),
diff --git a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out \
b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
--- a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
+++ b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
@@ -55,8 +55,8 @@ Ready.
% .L1 # table_name
% def # name
% clob # type
-% 538 # length
-[ "optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();o \
ptimizer.evaluate();optimizer.emptybind();optimizer.pushselect();optimizer.aliases();o \
ptimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();o \
ptimizer.commonTerms();optimizer.projectionpath();optimizer.reorder();optimizer.deadco \
de();optimizer.matpack();optimizer.querylog();optimizer.multiplex();optimizer.generato \
r();optimizer.mosaic();optimizer.profiler();optimizer.candidates();optimizer.wlc();optimizer.garbageCollector();" ]
+% 579 # length
+[ "optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();o \
ptimizer.evaluate();optimizer.emptybind();optimizer.pushselect();optimizer.aliases();o \
ptimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();o \
ptimizer.commonTerms();optimizer.projectionpath();optimizer.reorder();optimizer.deadco \
de();optimizer.matpack();optimizer.querylog();optimizer.multiplex();optimizer.generato \
r();optimizer.mosaic();optimizer.profiler();optimizer.candidates();optimizer.postfix();optimizer.deadcode();optimizer.wlc();optimizer.garbageCollector();" ]
#explain copy into ttt from '/tmp/xyz';
% .explain # table_name
% mal # name
@@ -114,8 +114,8 @@ end user.s10_1;
% .L1 # table_name
% def # name
% clob # type
-% 561 # length
-[ "optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();o \
ptimizer.evaluate();optimizer.emptybind();optimizer.pushselect();optimizer.aliases();o \
ptimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();o \
ptimizer.commonTerms();optimizer.projectionpath();optimizer.reorder();optimizer.deadco \
de();optimizer.matpack();optimizer.querylog();optimizer.multiplex();optimizer.generato \
r();optimizer.mosaic();optimizer.profiler();optimizer.candidates();optimizer.wlc();optimizer.sql_append();optimizer.garbageCollector();" ]
+% 602 # length
+[ "optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();o \
ptimizer.evaluate();optimizer.emptybind();optimizer.pushselect();optimizer.aliases();o \
ptimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();o \
ptimizer.commonTerms();optimizer.projectionpath();optimizer.reorder();optimizer.deadco \
de();optimizer.matpack();optimizer.querylog();optimizer.multiplex();optimizer.generato \
r();optimizer.mosaic();optimizer.profiler();optimizer.candidates();optimizer.postfix() \
;optimizer.deadcode();optimizer.wlc();optimizer.sql_append();optimizer.garbageCollector();" ]
#explain copy into ttt from '/tmp/xyz';
% .explain # table_name
% mal # name
diff --git a/monetdb5/modules/kernel/algebra.c b/monetdb5/modules/kernel/algebra.c
--- a/monetdb5/modules/kernel/algebra.c
+++ b/monetdb5/modules/kernel/algebra.c
@@ -816,6 +816,65 @@ ALGcount_no_nil(lng *result, const bat *
}
str
+ALGcountCND_bat(lng *result, const bat *bid, const bat *cnd)
+{
+ BAT *b;
+
+ if ( *cnd) {
+ if ((b = BATdescriptor(*cnd)) == NULL) {
+ throw(MAL, "aggr.count", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
+ }
+ *result = (lng) BATcount(b);
+ BBPunfix(b->batCacheid);
+ return MAL_SUCCEED;
+ }
+ if ((b = BATdescriptor(*bid)) == NULL) {
+ throw(MAL, "aggr.count", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
+ }
+ *result = (lng) BATcount(b);
+ BBPunfix(b->batCacheid);
+ return MAL_SUCCEED;
+}
+
+str
+ALGcountCND_nil(lng *result, const bat *bid, const bat *cnd, const bit *ignore_nils)
+{
+ BAT *b;
+ BUN cnt;
+
+ if (*ignore_nils){
+ if ((b = BATdescriptor(*bid)) == NULL) {
+ throw(MAL, "aggr.count", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
+ }
+ cnt = BATcount_no_nil(b);
+ } else{
+ if ( *cnd) {
+ if ((b = BATdescriptor(*cnd)) == NULL) {
+ throw(MAL, "aggr.count", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
+ }
+ *result = (lng) BATcount(b);
+ BBPunfix(b->batCacheid);
+ return MAL_SUCCEED;
+ }
+ if ((b = BATdescriptor(*bid)) == NULL) {
+ throw(MAL, "aggr.count", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
+ }
+ cnt = BATcount(b);
+ }
+ *result = (lng) cnt;
+ BBPunfix(b->batCacheid);
+ return MAL_SUCCEED;
+}
+
+str
+ALGcountCND_no_nil(lng *result, const bat *bid, const bat *cnd)
+{
+ bit ignore_nils = 1;
+
+ return ALGcountCND_nil(result, bid, cnd, &ignore_nils);
+}
+
+str
ALGslice(bat *ret, const bat *bid, const lng *start, const lng *end)
{
BAT *b, *bn = NULL;
diff --git a/monetdb5/modules/kernel/algebra.h b/monetdb5/modules/kernel/algebra.h
--- a/monetdb5/modules/kernel/algebra.h
+++ b/monetdb5/modules/kernel/algebra.h
@@ -60,6 +60,9 @@ mal_export str ALGsort33(bat *result, ba
mal_export str ALGcount_bat(lng *result, const bat *bid);
mal_export str ALGcount_nil(lng *result, const bat *bid, const bit *ignore_nils);
mal_export str ALGcount_no_nil(lng *result, const bat *bid);
+mal_export str ALGcountCND_bat(lng *result, const bat *bid, const bat *cnd);
+mal_export str ALGcountCND_nil(lng *result, const bat *bid, const bat *cnd, const \
bit *ignore_nils); +mal_export str ALGcountCND_no_nil(lng *result, const bat *bid, \
const bat *cnd); mal_export str ALGslice(bat *ret, const bat *bid, const lng *start, \
const lng *end); mal_export str ALGslice_int(bat *ret, const bat *bid, const int \
*start, const int *end); mal_export str ALGslice_lng(bat *ret, const bat *bid, const \
lng *start, const lng *end);
diff --git a/monetdb5/modules/kernel/algebra.mal \
b/monetdb5/modules/kernel/algebra.mal
--- a/monetdb5/modules/kernel/algebra.mal
+++ b/monetdb5/modules/kernel/algebra.mal
@@ -286,6 +286,19 @@ address ALGcount_no_nil
comment "Return the number of elements currently
in a BAT ignoring BUNs with nil-tail";
+# the variants with a candidate list
+command count( b:bat[:any], cnd:bat[:oid] ) :lng
+address ALGcountCND_bat
+comment "Return the current size (in number of elements) in a BAT.";
+command count ( b:bat[:any], cnd:bat[:oid], ignore_nils:bit ) :lng
+address ALGcountCND_nil
+comment "Return the number of elements currently in a BAT ignores
+ BUNs with nil-tail iff ignore_nils==TRUE.";
+command count_no_nil ( b:bat[:any_2], cnd:bat[:oid]) :lng
+address ALGcountCND_no_nil
+comment "Return the number of elements currently
+ in a BAT ignoring BUNs with nil-tail";
+
# Default Min and Max
# Implementations a generic Min and Max routines get declared first. The
# @emph{min()} and @emph{max()} routines below catch any tail-type.
diff --git a/monetdb5/optimizer/Makefile.ag b/monetdb5/optimizer/Makefile.ag
--- a/monetdb5/optimizer/Makefile.ag
+++ b/monetdb5/optimizer/Makefile.ag
@@ -52,6 +52,7 @@ lib_optimizer = {
opt_support.c opt_support.h \
opt_pushselect.c opt_pushselect.h \
opt_profiler.c opt_profiler.h \
+ opt_postfix.c opt_postfix.h \
opt_volcano.c opt_volcano.h \
opt_wrapper.c
}
diff --git a/monetdb5/optimizer/opt_deadcode.c b/monetdb5/optimizer/opt_deadcode.c
--- a/monetdb5/optimizer/opt_deadcode.c
+++ b/monetdb5/optimizer/opt_deadcode.c
@@ -63,7 +63,9 @@ OPTdeadcodeImplementation(Client cntxt,
}
if ( getModuleId(p) == batRef && isUpdateInstruction(p) && !p->barrier){
/* bat.append and friends are intermediates that need not be retained
- * unless they are used */
+ * unless they are not used outside of an update */
+ if( varused[getArg(p,1)] > 1 )
+ varused[getArg(p,0)]++; // force keeping it
} else
if (hasSideEffects(mb, p, FALSE) || !isLinearFlow(p) ||
(p->retc == 1 && mb->unsafeProp) || p->barrier /* ==side-effect */){
diff --git a/monetdb5/optimizer/opt_pipes.c b/monetdb5/optimizer/opt_pipes.c
--- a/monetdb5/optimizer/opt_pipes.c
+++ b/monetdb5/optimizer/opt_pipes.c
@@ -91,6 +91,8 @@ static struct PIPELINES {
"optimizer.mosaic();"
"optimizer.profiler();"
"optimizer.candidates();"
+ "optimizer.postfix();"
+ "optimizer.deadcode();"
// "optimizer.jit();" awaiting the new batcalc api
// "optimizer.oltp();"awaiting the autocommit front-end changes
"optimizer.wlc();"
@@ -127,6 +129,8 @@ static struct PIPELINES {
"optimizer.mosaic();"
"optimizer.profiler();"
"optimizer.candidates();"
+ "optimizer.postfix();"
+ "optimizer.deadcode();"
// "optimizer.jit();" awaiting the new batcalc api
// "optimizer.oltp();"awaiting the autocommit front-end changes
"optimizer.wlc();"
@@ -167,6 +171,8 @@ static struct PIPELINES {
"optimizer.generator();"
"optimizer.profiler();"
"optimizer.candidates();"
+ "optimizer.postfix();"
+ "optimizer.deadcode();"
// "optimizer.jit();" awaiting the new batcalc api
// "optimizer.oltp();"awaiting the autocommit front-end changes
"optimizer.mosaic();"
@@ -208,6 +214,8 @@ static struct PIPELINES {
"optimizer.mosaic();"
"optimizer.profiler();"
"optimizer.candidates();"
+ "optimizer.postfix();"
+ "optimizer.deadcode();"
// "optimizer.jit();" awaiting the new batcalc api
// "optimizer.oltp();"awaiting the autocommit front-end changes
"optimizer.wlc();"
diff --git a/monetdb5/optimizer/opt_postfix.c b/monetdb5/optimizer/opt_postfix.c
new file mode 100644
--- /dev/null
+++ b/monetdb5/optimizer/opt_postfix.c
@@ -0,0 +1,92 @@
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 1997 - July 2008 CWI, August 2008 - 2017 MonetDB B.V.
+ */
+
+/* The SQL code generator can not always look ahead to avoid
+ * generation of intermediates.
+ * Some of these patterns are captured in a postfix optimalisation.
+ */
+#include "monetdb_config.h"
+#include "mal_instruction.h"
+#include "opt_postfix.h"
+
+#define isCandidateList(M,P,I) ((M)->var[getArg(P,I)].id[0]== 'C')
+str
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic