[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