Changeset: cd82bf194680 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cd82bf194680 Added Files: sql/test/BugTracker-2019/Tests/cte-union.Bug-6755.sql Modified Files: clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 clients/Tests/exports.stable.out gdk/ChangeLog.Nov2019 gdk/gdk_calc.c gdk/gdk_calc.h monetdb5/mal/Tests/tst670.stable.err monetdb5/mal/mal_debugger.c monetdb5/modules/kernel/algebra.c monetdb5/modules/mal/00_batcalc_hge.mal monetdb5/modules/mal/00_batcalc_hge.mal.sh monetdb5/modules/mal/01_batcalc.mal monetdb5/modules/mal/01_batcalc.mal.sh monetdb5/modules/mal/01_calc.mal monetdb5/modules/mal/01_calc.mal.sh monetdb5/modules/mal/batcalc.c monetdb5/modules/mal/calc.c monetdb5/modules/mal/clients.c monetdb5/modules/mal/mal_io.c monetdb5/modules/mal/mal_mapi.c monetdb5/modules/mal/mat.c monetdb5/modules/mal/orderidx.c monetdb5/modules/mal/projectionpath.c monetdb5/modules/mal/querylog.c monetdb5/modules/mal/remote.c monetdb5/modules/mal/sysmon.c monetdb5/modules/mal/wlc.c monetdb5/optimizer/opt_wlc.c sql/backends/monet5/sql_scenario.c sql/backends/monet5/sql_statement.c sql/backends/monet5/wlr.c sql/common/sql_types.c sql/server/rel_optimizer.c sql/server/rel_psm.c sql/server/rel_select.c sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out sql/test/BugTracker-2019/Tests/All sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out sql/test/analytics/Tests/analytics11.stable.err sql/test/analytics/Tests/analytics11.stable.out sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.powerpc64.int128 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64.int128 sql/test/emptydb-upgrade-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade/Tests/upgrade.stable.out sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128 sql/test/emptydb/Tests/check.stable.out sql/test/emptydb/Tests/check.stable.out.32bit sql/test/emptydb/Tests/check.stable.out.int128 sql/test/subquery/Tests/correlated.stable.err sql/test/subquery/Tests/subquery.stable.err sql/test/subquery/Tests/subquery.stable.out sql/test/sys-schema/Tests/systemfunctions.stable.out sql/test/sys-schema/Tests/systemfunctions.stable.out.int128 sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade/Tests/upgrade.stable.out sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128 sql/test/wlcr/Tests/All sql/test/wlcr/Tests/wlc01.py sql/test/wlcr/Tests/wlc01.stable.out sql/test/wlcr/Tests/wlc100.py sql/test/wlcr/Tests/wlc100.stable.out sql/test/wlcr/Tests/wlc20.py sql/test/wlcr/Tests/wlc20.stable.out sql/test/wlcr/Tests/wlc21.py sql/test/wlcr/Tests/wlc21.stable.out sql/test/wlcr/Tests/wlc30.py sql/test/wlcr/Tests/wlc30.stable.out sql/test/wlcr/Tests/wlc40.py sql/test/wlcr/Tests/wlc40.stable.out sql/test/wlcr/Tests/wlc50.py sql/test/wlcr/Tests/wlc50.stable.out sql/test/wlcr/Tests/wlc70.py sql/test/wlcr/Tests/wlc70.stable.out Branch: grouping-analytics Log Message:
Merge with Nov2019 branch diffs (truncated from 145026 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 @@ -6117,14 +6117,14 @@ stdout of test 'MAL-signatures` in direc [ "batcalc", "avg", "pattern batcalc.avg(b:bat[:sht], s:bat[:oid], scale:int):dbl ", "CMDcalcavg;", "average of non-nil values of B" ] [ "batcalc", "avg", "pattern batcalc.avg(b:bat[:sht], scale:int) (X_0:dbl, X_1:lng) ", "CMDcalcavg;", "average and number of non-nil values of B" ] [ "batcalc", "avg", "pattern batcalc.avg(b:bat[:sht], scale:int):dbl ", "CMDcalcavg;", "average of non-nil values of B with candidates list" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:any_1, v2:any_1, s:bat[:oid], sym:bit, linc:bit, hinc:bit, nils_false:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa) with candidate list" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:any_1, v2:any_1, sym:bit, linc:bit, hinc:bit, nils_false:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa)" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:any_1, v2:bat[:any_1], s:bat[:oid], sym:bit, linc:bit, hinc:bit, nils_false:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa) with candidate list" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:any_1, v2:bat[:any_1], sym:bit, linc:bit, hinc:bit, nils_false:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa)" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:bat[:any_1], v2:any_1, s:bat[:oid], sym:bit, linc:bit, hinc:bit, nils_false:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa) with candidate list" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:bat[:any_1], v2:any_1, sym:bit, linc:bit, hinc:bit, nils_false:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa)" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:bat[:any_1], v2:bat[:any_1], s:bat[:oid], sym:bit, linc:bit, hinc:bit, nils_false:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa) with candidate list" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:bat[:any_1], v2:bat[:any_1], sym:bit, linc:bit, hinc:bit, nils_false:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa)" ] +[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:any_1, v2:any_1, s:bat[:oid], sym:bit, linc:bit, hinc:bit, nils_false:bit, anti:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa) with candidate list" ] +[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:any_1, v2:any_1, sym:bit, linc:bit, hinc:bit, nils_false:bit, anti:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa)" ] +[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:any_1, v2:bat[:any_1], s:bat[:oid], sym:bit, linc:bit, hinc:bit, nils_false:bit, anti:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa) with candidate list" ] +[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:any_1, v2:bat[:any_1], sym:bit, linc:bit, hinc:bit, nils_false:bit, anti:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa)" ] +[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:bat[:any_1], v2:any_1, s:bat[:oid], sym:bit, linc:bit, hinc:bit, nils_false:bit, anti:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa) with candidate list" ] +[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:bat[:any_1], v2:any_1, sym:bit, linc:bit, hinc:bit, nils_false:bit, anti:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa)" ] +[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:bat[:any_1], v2:bat[:any_1], s:bat[:oid], sym:bit, linc:bit, hinc:bit, nils_false:bit, anti:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa) with candidate list" ] +[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:bat[:any_1], v2:bat[:any_1], sym:bit, linc:bit, hinc:bit, nils_false:bit, anti:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa)" ] [ "batcalc", "bit", "pattern batcalc.bit(b:bat[:bit]):bat[:bit] ", "CMDconvertsignal_bit;", "cast from bit to bit, signal error on overflow" ] [ "batcalc", "bit", "pattern batcalc.bit(b:bat[:bit], s:bat[:oid]):bat[:bit] ", "CMDconvertsignal_bit;", "cast from bit to bit with candidates list, signal error on overflow" ] [ "batcalc", "bit", "pattern batcalc.bit(b:bat[:bte]):bat[:bit] ", "CMDconvertsignal_bit;", "cast from bte to bit, signal error on overflow" ] @@ -10066,7 +10066,7 @@ stdout of test 'MAL-signatures` in direc [ "calc", "and", "pattern calc.and(v1:int, v2:int):int ", "CMDvarAND;", "Return V1 AND V2" ] [ "calc", "and", "pattern calc.and(v1:lng, v2:lng):lng ", "CMDvarAND;", "Return V1 AND V2" ] [ "calc", "and", "pattern calc.and(v1:sht, v2:sht):sht ", "CMDvarAND;", "Return V1 AND V2" ] -[ "calc", "between", "pattern calc.between(b:any_1, lo:any_1, hi:any_1, sym:bit, linc:bit, hinc:bit, nils_false:bit):bit ", "CMDvarBETWEEN;", "B between LO and HI inclusive" ] +[ "calc", "between", "pattern calc.between(b:any_1, lo:any_1, hi:any_1, sym:bit, linc:bit, hinc:bit, nils_false:bit, anti:bit):bit ", "CMDvarBETWEEN;", "B between LO and HI inclusive" ] [ "calc", "bit", "pattern calc.bit(v:bit):bit ", "CMDvarCONVERT;", "Cast VALUE to bit" ] [ "calc", "bit", "pattern calc.bit(v:bte):bit ", "CMDvarCONVERT;", "Cast VALUE to bit" ] [ "calc", "bit", "pattern calc.bit(v:dbl):bit ", "CMDvarCONVERT;", "Cast VALUE to bit" ] 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 @@ -8651,22 +8651,14 @@ stdout of test 'MAL-signatures` in direc [ "batcalc", "avg", "pattern batcalc.avg(b:bat[:sht], s:bat[:oid], scale:int):dbl ", "CMDcalcavg;", "average of non-nil values of B" ] [ "batcalc", "avg", "pattern batcalc.avg(b:bat[:sht], scale:int) (X_0:dbl, X_1:lng) ", "CMDcalcavg;", "average and number of non-nil values of B" ] [ "batcalc", "avg", "pattern batcalc.avg(b:bat[:sht], scale:int):dbl ", "CMDcalcavg;", "average of non-nil values of B with candidates list" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:any_1, v2:any_1, s:bat[:oid], sym:bit, linc:bit, hinc:bit, nils_false:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa) with candidate list" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:any_1, v2:any_1, sym:bit, linc:bit, hinc:bit, nils_false:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa)" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:any_1, v2:bat[:any_1], s:bat[:oid], sym:bit, linc:bit, hinc:bit, nils_false:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa) with candidate list" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:any_1, v2:bat[:any_1], sym:bit, linc:bit, hinc:bit, nils_false:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa)" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:bat[:any_1], v2:any_1, s:bat[:oid], sym:bit, linc:bit, hinc:bit, nils_false:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa) with candidate list" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:bat[:any_1], v2:any_1, sym:bit, linc:bit, hinc:bit, nils_false:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa)" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:bat[:any_1], v2:bat[:any_1], s:bat[:oid], sym:bit, linc:bit, hinc:bit, nils_false:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa) with candidate list" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:bat[:any_1], v2:bat[:any_1], sym:bit, linc:bit, hinc:bit, nils_false:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa)" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:hge], lo:bat[:hge], hi:bat[:hge]):bat[:bit] ", "CMDbatBETWEEN;", "B between LO and HI inclusive, nil border is (minus) infinity" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:hge], lo:bat[:hge], hi:bat[:hge], s:bat[:oid]):bat[:bit] ", "CMDbatBETWEEN;", "B between LO and HI inclusive with candidates list, nil border is (minus) infinity" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:hge], lo:bat[:hge], hi:hge):bat[:bit] ", "CMDbatBETWEEN;", "B between LO and HI inclusive, nil border is (minus) infinity" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:hge], lo:bat[:hge], hi:hge, s:bat[:oid]):bat[:bit] ", "CMDbatBETWEEN;", "B between LO and HI inclusive with candidates list, nil border is (minus) infinity" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:hge], lo:hge, hi:bat[:hge]):bat[:bit] ", "CMDbatBETWEEN;", "B between LO and HI inclusive, nil border is (minus) infinity" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:hge], lo:hge, hi:bat[:hge], s:bat[:oid]):bat[:bit] ", "CMDbatBETWEEN;", "B between LO and HI inclusive with candidates list, nil border is (minus) infinity" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:hge], lo:hge, hi:hge):bat[:bit] ", "CMDbatBETWEEN;", "B between LO and HI inclusive, nil border is (minus) infinity" ] -[ "batcalc", "between", "pattern batcalc.between(b:bat[:hge], lo:hge, hi:hge, s:bat[:oid]):bat[:bit] ", "CMDbatBETWEEN;", "B between LO and HI inclusive with candidates list, nil border is (minus) infinity" ] +[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:any_1, v2:any_1, s:bat[:oid], sym:bit, linc:bit, hinc:bit, nils_false:bit, anti:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa) with candidate list" ] +[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:any_1, v2:any_1, sym:bit, linc:bit, hinc:bit, nils_false:bit, anti:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa)" ] +[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:any_1, v2:bat[:any_1], s:bat[:oid], sym:bit, linc:bit, hinc:bit, nils_false:bit, anti:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa) with candidate list" ] +[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:any_1, v2:bat[:any_1], sym:bit, linc:bit, hinc:bit, nils_false:bit, anti:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa)" ] +[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:bat[:any_1], v2:any_1, s:bat[:oid], sym:bit, linc:bit, hinc:bit, nils_false:bit, anti:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa) with candidate list" ] +[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:bat[:any_1], v2:any_1, sym:bit, linc:bit, hinc:bit, nils_false:bit, anti:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa)" ] +[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:bat[:any_1], v2:bat[:any_1], s:bat[:oid], sym:bit, linc:bit, hinc:bit, nils_false:bit, anti:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa) with candidate list" ] +[ "batcalc", "between", "pattern batcalc.between(b:bat[:any_1], v1:bat[:any_1], v2:bat[:any_1], sym:bit, linc:bit, hinc:bit, nils_false:bit, anti:bit):bat[:bit] ", "CMDbatBETWEEN;", "B between V1 and V2 (or vice versa)" ] [ "batcalc", "bit", "pattern batcalc.bit(b:bat[:bit]):bat[:bit] ", "CMDconvertsignal_bit;", "cast from bit to bit, signal error on overflow" ] [ "batcalc", "bit", "pattern batcalc.bit(b:bat[:bit], s:bat[:oid]):bat[:bit] ", "CMDconvertsignal_bit;", "cast from bit to bit with candidates list, signal error on overflow" ] [ "batcalc", "bit", "pattern batcalc.bit(b:bat[:bte]):bat[:bit] ", "CMDconvertsignal_bit;", "cast from bte to bit, signal error on overflow" ] @@ -14218,7 +14210,7 @@ stdout of test 'MAL-signatures` in direc [ "calc", "and", "pattern calc.and(v1:int, v2:int):int ", "CMDvarAND;", "Return V1 AND V2" ] [ "calc", "and", "pattern calc.and(v1:lng, v2:lng):lng ", "CMDvarAND;", "Return V1 AND V2" ] [ "calc", "and", "pattern calc.and(v1:sht, v2:sht):sht ", "CMDvarAND;", "Return V1 AND V2" ] -[ "calc", "between", "pattern calc.between(b:any_1, lo:any_1, hi:any_1, sym:bit, linc:bit, hinc:bit, nils_false:bit):bit ", "CMDvarBETWEEN;", "B between LO and HI inclusive" ] +[ "calc", "between", "pattern calc.between(b:any_1, lo:any_1, hi:any_1, sym:bit, linc:bit, hinc:bit, nils_false:bit, anti:bit):bit ", "CMDvarBETWEEN;", "B between LO and HI inclusive" ] [ "calc", "bit", "pattern calc.bit(v:bit):bit ", "CMDvarCONVERT;", "Cast VALUE to bit" ] [ "calc", "bit", "pattern calc.bit(v:bte):bit ", "CMDvarCONVERT;", "Cast VALUE to bit" ] [ "calc", "bit", "pattern calc.bit(v:dbl):bit ", "CMDvarCONVERT;", "Cast VALUE to bit" ] 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 @@ -27,10 +27,10 @@ BAT *BATcalcaddcst(BAT *b, const ValReco BAT *BATcalcand(BAT *b1, BAT *b2, BAT *s); BAT *BATcalcandcst(BAT *b, const ValRecord *v, BAT *s); gdk_return BATcalcavg(BAT *b, BAT *s, dbl *avg, BUN *vals, int scale); -BAT *BATcalcbetween(BAT *b, BAT *lo, BAT *hi, BAT *s, bool symmetric, bool linc, bool hinc, bool nils_false); -BAT *BATcalcbetweenbatcst(BAT *b, BAT *lo, const ValRecord *hi, BAT *s, bool symmetric, bool linc, bool hinc, bool nils_false); -BAT *BATcalcbetweencstbat(BAT *b, const ValRecord *lo, BAT *hi, BAT *s, bool symmetric, bool linc, bool hinc, bool nils_false); -BAT *BATcalcbetweencstcst(BAT *b, const ValRecord *lo, const ValRecord *hi, BAT *s, bool symmetric, bool linc, bool hinc, bool nils_false); +BAT *BATcalcbetween(BAT *b, BAT *lo, BAT *hi, BAT *s, bool symmetric, bool linc, bool hinc, bool nils_false, bool anti); +BAT *BATcalcbetweenbatcst(BAT *b, BAT *lo, const ValRecord *hi, BAT *s, bool symmetric, bool linc, bool hinc, bool nils_false, bool anti); +BAT *BATcalcbetweencstbat(BAT *b, const ValRecord *lo, BAT *hi, BAT *s, bool symmetric, bool linc, bool hinc, bool nils_false, bool anti); +BAT *BATcalcbetweencstcst(BAT *b, const ValRecord *lo, const ValRecord *hi, BAT *s, bool symmetric, bool linc, bool hinc, bool nils_false, bool anti); BAT *BATcalccmp(BAT *b1, BAT *b2, BAT *s); BAT *BATcalccmpcst(BAT *b, const ValRecord *v, BAT *s); BAT *BATcalccstadd(const ValRecord *v, BAT *b, BAT *s, int tp, bool abort_on_error); @@ -359,7 +359,7 @@ ValPtr VALset(ValPtr v, int t, void *p); gdk_return VARcalcabsolute(ValPtr ret, const ValRecord *v); gdk_return VARcalcadd(ValPtr ret, const ValRecord *lft, const ValRecord *rgt, bool abort_on_error); gdk_return VARcalcand(ValPtr ret, const ValRecord *lft, const ValRecord *rgt); -gdk_return VARcalcbetween(ValPtr ret, const ValRecord *v, const ValRecord *lo, const ValRecord *hi, bool symmetric, bool linc, bool hinc, bool nils_false); +gdk_return VARcalcbetween(ValPtr ret, const ValRecord *v, const ValRecord *lo, const ValRecord *hi, bool symmetric, bool linc, bool hinc, bool nils_false, bool anti); gdk_return VARcalccmp(ValPtr ret, const ValRecord *lft, const ValRecord *rgt); gdk_return VARcalcdecr(ValPtr ret, const ValRecord *v, bool abort_on_error); gdk_return VARcalcdiv(ValPtr ret, const ValRecord *lft, const ValRecord *rgt, bool abort_on_error); diff --git a/gdk/ChangeLog.Nov2019 b/gdk/ChangeLog.Nov2019 --- a/gdk/ChangeLog.Nov2019 +++ b/gdk/ChangeLog.Nov2019 @@ -1,6 +1,10 @@ # ChangeLog file for MonetDB # This file is updated with Maddlog +* Sun Sep 8 2019 Sjoerd Mullender <sjo...@acm.org> +- BATcalcbetween and all its variants now have an extra bool parameter + "anti" to invert the test. + * Thu Apr 18 2019 Sjoerd Mullender <sjo...@acm.org> - All forms of BATcalcbetween and VARcalcbetween have extra bool arguments for low inclusive, high inclusive and nils false. The latter causes diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c --- a/gdk/gdk_calc.c +++ b/gdk/gdk_calc.c @@ -12762,11 +12762,11 @@ VARcalcrsh(ValPtr ret, const ValRecord * ? nils_false ? 0 : (nils++, bit_nil) \ : (is_##TYPE##_nil(lo) || is_##TYPE##_nil(hi) \ ? (nils++, bit_nil) \ - : (bit) ((((lo) < (v) || (linc && (lo) == (v))) && \ - ((v) < (hi) || (hinc && (v) == (hi)))) || \ - (symmetric && \ - ((hi) < (v) || (hinc && (hi) == (v))) && \ - ((v) < (lo) || (linc && (v) == (lo))))))) + : (bit) (((((lo) < (v) || (linc && (lo) == (v))) && \ + ((v) < (hi) || (hinc && (v) == (hi)))) || \ + (symmetric && \ + ((hi) < (v) || (hinc && (hi) == (v))) && \ + ((v) < (lo) || (linc && (v) == (lo))))) ^ anti))) #define BETWEEN_LOOP_TYPE(TYPE) \ do { \ @@ -12790,7 +12790,7 @@ BATcalcbetween_intern(const void *src, i const void *hi, int incr3, const char *hp3, int wd3, int tp, BUN cnt, BUN start, BUN end, const oid *restrict cand, const oid *candend, - oid seqbase, bool symmetric, + oid seqbase, bool symmetric, bool anti, bool linc, bool hinc, bool nils_false, const char *func) { BAT *bn; @@ -12879,15 +12879,16 @@ BATcalcbetween_intern(const void *src, i } else { int c; dst[l] = (bit) - ((((c = (*atomcmp)(p1, p2)) > 0 - || (linc && c == 0)) - && ((c = (*atomcmp)(p1, p3)) < 0 - || (hinc && c == 0))) - || (symmetric - && ((c = (*atomcmp)(p1, p3)) > 0 - || (hinc && c == 0)) - && ((c = (*atomcmp)(p1, p2)) < 0 - || (linc && c == 0)))); + (((((c = (*atomcmp)(p1, p2)) > 0 + || (linc && c == 0)) + && ((c = (*atomcmp)(p1, p3)) < 0 + || (hinc && c == 0))) + || (symmetric + && ((c = (*atomcmp)(p1, p3)) > 0 + || (hinc && c == 0)) + && ((c = (*atomcmp)(p1, p2)) < 0 + || (linc && c == 0)))) + ^ anti); } } break; @@ -12908,7 +12909,7 @@ BATcalcbetween_intern(const void *src, i BAT * BATcalcbetween(BAT *b, BAT *lo, BAT *hi, BAT *s, bool symmetric, - bool linc, bool hinc, bool nils_false) + bool linc, bool hinc, bool nils_false, bool anti) { BAT *bn; BUN start, end, cnt; @@ -12936,15 +12937,16 @@ BATcalcbetween(BAT *b, BAT *lo, BAT *hi, res = bit_nil; else res = (bit) - (((b->tseqbase > lo->tseqbase || - (linc && b->tseqbase == lo->tseqbase)) && - (b->tseqbase < hi->tseqbase || - (hinc && b->tseqbase == hi->tseqbase))) || - (symmetric && - (b->tseqbase > hi->tseqbase || - (hinc && b->tseqbase == hi->tseqbase)) && - (b->tseqbase < lo->tseqbase || - (linc && b->tseqbase == lo->tseqbase)))); + ((((b->tseqbase > lo->tseqbase || + (linc && b->tseqbase == lo->tseqbase)) && + (b->tseqbase < hi->tseqbase || + (hinc && b->tseqbase == hi->tseqbase))) || + (symmetric && + (b->tseqbase > hi->tseqbase || + (hinc && b->tseqbase == hi->tseqbase)) && + (b->tseqbase < lo->tseqbase || + (linc && b->tseqbase == lo->tseqbase)))) + ^ anti); return BATconstant(b->hseqbase, TYPE_bit, &res, BATcount(b), TRANSIENT); @@ -12961,7 +12963,7 @@ BATcalcbetween(BAT *b, BAT *lo, BAT *hi, hi->twidth, b->ttype, cnt, start, end, cand, candend, - b->hseqbase, symmetric, linc, hinc, + b->hseqbase, symmetric, anti, linc, hinc, nils_false, "BATcalcbetween"); return bn; @@ -12969,7 +12971,8 @@ BATcalcbetween(BAT *b, BAT *lo, BAT *hi, BAT * BATcalcbetweencstcst(BAT *b, const ValRecord *lo, const ValRecord *hi, BAT *s, - bool symmetric, bool linc, bool hinc, bool nils_false) + bool symmetric, bool linc, bool hinc, bool nils_false, + bool anti) { BAT *bn; BUN start, end, cnt; @@ -12992,7 +12995,7 @@ BATcalcbetweencstcst(BAT *b, const ValRe VALptr(hi), 0, NULL, 0, b->ttype, cnt, start, end, cand, candend, - b->hseqbase, symmetric, + b->hseqbase, symmetric, anti, linc, hinc, nils_false, "BATcalcbetweencstcst"); @@ -13001,7 +13004,8 @@ BATcalcbetweencstcst(BAT *b, const ValRe BAT * BATcalcbetweenbatcst(BAT *b, BAT *lo, const ValRecord *hi, BAT *s, - bool symmetric, bool linc, bool hinc, bool nils_false) + bool symmetric, bool linc, bool hinc, bool nils_false, + bool anti) { BAT *bn; BUN start, end, cnt; @@ -13029,7 +13033,7 @@ BATcalcbetweenbatcst(BAT *b, BAT *lo, co VALptr(hi), 0, NULL, 0, b->ttype, cnt, start, end, cand, candend, - b->hseqbase, symmetric, + b->hseqbase, symmetric, anti, linc, hinc, nils_false, "BATcalcbetweenbatcst"); @@ -13038,7 +13042,8 @@ BATcalcbetweenbatcst(BAT *b, BAT *lo, co BAT * BATcalcbetweencstbat(BAT *b, const ValRecord *lo, BAT *hi, BAT *s, - bool symmetric, bool linc, bool hinc, bool nils_false) + bool symmetric, bool linc, bool hinc, bool nils_false, + bool anti) { BAT *bn; BUN start, end, cnt; @@ -13066,7 +13071,7 @@ BATcalcbetweencstbat(BAT *b, const ValRe hi->twidth, b->ttype, cnt, start, end, cand, candend, - b->hseqbase, symmetric, + b->hseqbase, symmetric, anti, linc, hinc, nils_false, "BATcalcbetweencstbat"); @@ -13076,7 +13081,7 @@ BATcalcbetweencstbat(BAT *b, const ValRe gdk_return VARcalcbetween(ValPtr ret, const ValRecord *v, const ValRecord *lo, const ValRecord *hi, bool symmetric, bool linc, bool hinc, - bool nils_false) + bool nils_false, bool anti) { BUN nils = 0; /* to make reusing BETWEEN macro easier */ int t; @@ -13130,16 +13135,17 @@ VARcalcbetween(ValPtr ret, const ValReco ret->val.btval = bit_nil; else { int c; - ret->val.btval = - (bit) ((((c = atomcmp(VALptr(v), VALptr(lo))) > 0 || - (linc && c == 0)) && - ((c = atomcmp(VALptr(v), VALptr(hi)) < 0 || - (hinc && c == 0)))) || - (symmetric && - ((c = atomcmp(VALptr(v), VALptr(hi))) > 0 || - (hinc && c == 0)) && - ((c = atomcmp(VALptr(v), VALptr(lo))) < 0 || - (linc && c == 0)))); + ret->val.btval = (bit) + (((((c = atomcmp(VALptr(v), VALptr(lo))) > 0 || _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list