Changeset: f117137a0700 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f117137a0700
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
clients/Tests/exports.stable.out
monetdb5/modules/kernel/algebra.c
monetdb5/modules/kernel/algebra.mal
sql/server/rel_optimizer.c
Branch: unlock
Log Message:
Merge with default branch.
diffs (truncated from 722 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
@@ -113,12 +113,12 @@ stdout of test 'MAL-signatures` in direc
[ "aggr", "corr", "command aggr.corr(X_1:bat[:any_2],
X_2:bat[:any_2]):dbl ", "ALGcorr;", "" ]
[ "aggr", "count", "command aggr.count(X_1:bat[:any_1],
X_2:bat[:oid], X_3:bat[:any_2], X_4:bit):bat[:lng] ", "AGGRcount3;", ""
]
[ "aggr", "count", "command aggr.count(X_1:bat[:any_1],
X_2:bat[:oid], X_3:bat[:any_2]):bat[:lng] ", "AGGRcount3nils;", ""
]
-[ "aggr", "count", "command aggr.count(X_1:bat[:any],
X_2:bat[:oid]):lng ", "ALGcountCND_bat;", "" ]
-[ "aggr", "count", "command aggr.count(X_1:bat[:any],
X_2:bat[:oid], X_3:bit):lng ", "ALGcountCND_nil;", "" ]
+[ "aggr", "count", "command aggr.count(X_1:bat[:any],
X_2:bat[:cnd]):lng ", "ALGcountCND_bat;", "" ]
+[ "aggr", "count", "command aggr.count(X_1:bat[:any],
X_2:bat[:cnd], X_3:bit):lng ", "ALGcountCND_nil;", "" ]
[ "aggr", "count", "command aggr.count(X_1:bat[:any]):lng ",
"ALGcount_bat;", "" ]
[ "aggr", "count", "command aggr.count(X_1:bat[:any], X_2:bit):lng
", "ALGcount_nil;", "" ]
[ "aggr", "count_no_nil", "command aggr.count_no_nil(X_1:bat[:any_1],
X_2:bat[:oid], X_3:bat[:any_2]):bat[:lng] ", "AGGRcount3nonils;", ""
]
-[ "aggr", "count_no_nil", "command aggr.count_no_nil(X_1:bat[:any_2],
X_2:bat[:oid]):lng ", "ALGcountCND_no_nil;", "" ]
+[ "aggr", "count_no_nil", "command aggr.count_no_nil(X_1:bat[:any_2],
X_2:bat[:cnd]):lng ", "ALGcountCND_no_nil;", "" ]
[ "aggr", "count_no_nil", "command aggr.count_no_nil(X_1:bat[:any_2]):lng
", "ALGcount_no_nil;", "" ]
[ "aggr", "covariance", "command aggr.covariance(X_1:bat[:bte],
X_2:bat[:bte], X_3:bat[:oid], X_4:bat[:any_1]):bat[:dbl] ",
"AGGRcovariance;", "" ]
[ "aggr", "covariance", "command aggr.covariance(X_1:bat[:dbl],
X_2:bat[:dbl], X_3:bat[:oid], X_4:bat[:any_1]):bat[:dbl] ",
"AGGRcovariance;", "" ]
@@ -667,10 +667,10 @@ stdout of test 'MAL-signatures` in direc
[ "algebra", "outerjoin", "command algebra.outerjoin(X_1:bat[:any_1],
X_2:bat[:any_1], X_3:bat[:cnd], X_4:bat[:cnd], X_5:bit, X_6:lng):bat[:oid] ",
"ALGouterjoin1;", "" ]
[ "algebra", "outerjoin", "command algebra.outerjoin(X_2:bat[:any_1],
X_3:bat[:any_1], X_4:bat[:cnd], X_5:bat[:cnd], X_6:bit, X_7:lng)
(X_0:bat[:oid], X_1:bat[:oid]) ", "ALGouterjoin;", "" ]
[ "algebra", "project", "pattern algebra.project(X_1:bat[:any_1],
X_2:any_3):bat[:any_3] ", "ALGprojecttail;", "" ]
+[ "algebra", "projection", "command algebra.projection(X_1:bat[:msk],
X_2:bat[:any_3], X_3:bat[:any_3]):bat[:any_3] ", "ALGprojection2;", ""
]
+[ "algebra", "projection", "command algebra.projection(X_1:bat[:oid],
X_2:bat[:any_3], X_3:bat[:any_3]):bat[:any_3] ", "ALGprojection2;", ""
]
[ "algebra", "projection", "command algebra.projection(X_1:bat[:msk],
X_2:bat[:any_3]):bat[:any_3] ", "ALGprojection;", "" ]
[ "algebra", "projection", "command algebra.projection(X_1:bat[:oid],
X_2:bat[:any_3]):bat[:any_3] ", "ALGprojection;", "" ]
-[ "algebra", "projection2", "command algebra.projection2(X_1:bat[:msk],
X_2:bat[:any_3], X_3:bat[:any_3]):bat[:any_3] ", "ALGprojection2;", ""
]
-[ "algebra", "projection2", "command algebra.projection2(X_1:bat[:oid],
X_2:bat[:any_3], X_3:bat[:any_3]):bat[:any_3] ", "ALGprojection2;", ""
]
[ "algebra", "projectionpath", "pattern
algebra.projectionpath(X_1:bat[:any]...):bat[:any] ", "ALGprojectionpath;",
"" ]
[ "algebra", "rangejoin", "command algebra.rangejoin(X_1:bat[:any_1],
X_2:bat[:any_1], X_3:bat[:any_1], X_4:bat[:cnd], X_5:bat[:cnd], X_6:bit,
X_7:bit, X_8:bit, X_9:bit, X_10:lng):bat[:oid] ", "ALGrangejoin1;", ""
]
[ "algebra", "rangejoin", "command algebra.rangejoin(X_2:bat[:any_1],
X_3:bat[:any_1], X_4:bat[:any_1], X_5:bat[:cnd], X_6:bat[:cnd], X_7:bit,
X_8:bit, X_9:bit, X_10:bit, X_11:lng) (X_0:bat[:oid], X_1:bat[:oid]) ",
"ALGrangejoin;", "" ]
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
@@ -122,12 +122,12 @@ stdout of test 'MAL-signatures` in direc
[ "aggr", "corr", "command aggr.corr(X_1:bat[:any_2],
X_2:bat[:any_2]):dbl ", "ALGcorr;", "" ]
[ "aggr", "count", "command aggr.count(X_1:bat[:any_1],
X_2:bat[:oid], X_3:bat[:any_2], X_4:bit):bat[:lng] ", "AGGRcount3;", ""
]
[ "aggr", "count", "command aggr.count(X_1:bat[:any_1],
X_2:bat[:oid], X_3:bat[:any_2]):bat[:lng] ", "AGGRcount3nils;", ""
]
-[ "aggr", "count", "command aggr.count(X_1:bat[:any],
X_2:bat[:oid]):lng ", "ALGcountCND_bat;", "" ]
-[ "aggr", "count", "command aggr.count(X_1:bat[:any],
X_2:bat[:oid], X_3:bit):lng ", "ALGcountCND_nil;", "" ]
+[ "aggr", "count", "command aggr.count(X_1:bat[:any],
X_2:bat[:cnd]):lng ", "ALGcountCND_bat;", "" ]
+[ "aggr", "count", "command aggr.count(X_1:bat[:any],
X_2:bat[:cnd], X_3:bit):lng ", "ALGcountCND_nil;", "" ]
[ "aggr", "count", "command aggr.count(X_1:bat[:any]):lng ",
"ALGcount_bat;", "" ]
[ "aggr", "count", "command aggr.count(X_1:bat[:any], X_2:bit):lng
", "ALGcount_nil;", "" ]
[ "aggr", "count_no_nil", "command aggr.count_no_nil(X_1:bat[:any_1],
X_2:bat[:oid], X_3:bat[:any_2]):bat[:lng] ", "AGGRcount3nonils;", ""
]
-[ "aggr", "count_no_nil", "command aggr.count_no_nil(X_1:bat[:any_2],
X_2:bat[:oid]):lng ", "ALGcountCND_no_nil;", "" ]
+[ "aggr", "count_no_nil", "command aggr.count_no_nil(X_1:bat[:any_2],
X_2:bat[:cnd]):lng ", "ALGcountCND_no_nil;", "" ]
[ "aggr", "count_no_nil", "command aggr.count_no_nil(X_1:bat[:any_2]):lng
", "ALGcount_no_nil;", "" ]
[ "aggr", "covariance", "command aggr.covariance(X_1:bat[:bte],
X_2:bat[:bte], X_3:bat[:oid], X_4:bat[:any_1]):bat[:dbl] ",
"AGGRcovariance;", "" ]
[ "aggr", "covariance", "command aggr.covariance(X_1:bat[:dbl],
X_2:bat[:dbl], X_3:bat[:oid], X_4:bat[:any_1]):bat[:dbl] ",
"AGGRcovariance;", "" ]
@@ -784,10 +784,10 @@ stdout of test 'MAL-signatures` in direc
[ "algebra", "outerjoin", "command algebra.outerjoin(X_1:bat[:any_1],
X_2:bat[:any_1], X_3:bat[:cnd], X_4:bat[:cnd], X_5:bit, X_6:lng):bat[:oid] ",
"ALGouterjoin1;", "" ]
[ "algebra", "outerjoin", "command algebra.outerjoin(X_2:bat[:any_1],
X_3:bat[:any_1], X_4:bat[:cnd], X_5:bat[:cnd], X_6:bit, X_7:lng)
(X_0:bat[:oid], X_1:bat[:oid]) ", "ALGouterjoin;", "" ]
[ "algebra", "project", "pattern algebra.project(X_1:bat[:any_1],
X_2:any_3):bat[:any_3] ", "ALGprojecttail;", "" ]
+[ "algebra", "projection", "command algebra.projection(X_1:bat[:msk],
X_2:bat[:any_3], X_3:bat[:any_3]):bat[:any_3] ", "ALGprojection2;", ""
]
+[ "algebra", "projection", "command algebra.projection(X_1:bat[:oid],
X_2:bat[:any_3], X_3:bat[:any_3]):bat[:any_3] ", "ALGprojection2;", ""
]
[ "algebra", "projection", "command algebra.projection(X_1:bat[:msk],
X_2:bat[:any_3]):bat[:any_3] ", "ALGprojection;", "" ]
[ "algebra", "projection", "command algebra.projection(X_1:bat[:oid],
X_2:bat[:any_3]):bat[:any_3] ", "ALGprojection;", "" ]
-[ "algebra", "projection2", "command algebra.projection2(X_1:bat[:msk],
X_2:bat[:any_3], X_3:bat[:any_3]):bat[:any_3] ", "ALGprojection2;", ""
]
-[ "algebra", "projection2", "command algebra.projection2(X_1:bat[:oid],
X_2:bat[:any_3], X_3:bat[:any_3]):bat[:any_3] ", "ALGprojection2;", ""
]
[ "algebra", "projectionpath", "pattern
algebra.projectionpath(X_1:bat[:any]...):bat[:any] ", "ALGprojectionpath;",
"" ]
[ "algebra", "rangejoin", "command algebra.rangejoin(X_1:bat[:any_1],
X_2:bat[:any_1], X_3:bat[:any_1], X_4:bat[:cnd], X_5:bat[:cnd], X_6:bit,
X_7:bit, X_8:bit, X_9:bit, X_10:lng):bat[:oid] ", "ALGrangejoin1;", ""
]
[ "algebra", "rangejoin", "command algebra.rangejoin(X_2:bat[:any_1],
X_3:bat[:any_1], X_4:bat[:any_1], X_5:bat[:cnd], X_6:bat[:cnd], X_7:bit,
X_8:bit, X_9:bit, X_10:bit, X_11:lng) (X_0:bat[:oid], X_1:bat[:oid]) ",
"ALGrangejoin;", "" ]
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
@@ -203,6 +203,7 @@ BAT *BATthetaselect(BAT *b, BAT *s, cons
void BATtseqbase(BAT *b, oid o);
void BATundo(BAT *b);
BAT *BATunique(BAT *b, BAT *s);
+BAT *BATunmask(BAT *b);
BBPrec *BBP[N_BBPINIT];
gdk_return BBPaddfarm(const char *dirname, int rolemask, bool logerror);
void BBPclear(bat bid);
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
@@ -374,18 +374,19 @@ ALGselectNotNil(bat *result, const bat *
throw(MAL, "algebra.selectNotNil", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
if (!b->tnonil) {
- BAT *bn, *s;
+ BAT *s;
s = BATselect(b, NULL, ATOMnilptr(b->ttype), NULL, true, true,
true);
if (s) {
- bn = BATproject(s, b);
+ BAT *bn = BATproject(s, b);
BBPunfix(s->batCacheid);
+ if (bn) {
+ BBPunfix(b->batCacheid);
+ *result = bn->batCacheid;
+ BBPkeepref(*result);
+ return MAL_SUCCEED;
+ }
}
BBPunfix(b->batCacheid);
- if (bn) {
- *result = bn->batCacheid;
- BBPkeepref(*result);
- return MAL_SUCCEED;
- }
throw(MAL, "algebra.selectNotNil", GDK_EXCEPTION);
}
/* just pass on the result */
@@ -821,21 +822,28 @@ ALGcrossproduct2(bat *l, bat *r, const b
return ALGcrossproduct(l, r, left, right, max_one);
}
-str
-ALGprojection(bat *result, const bat *lid, const bat *rid)
+static str
+ALGprojection2(bat *result, const bat *lid, const bat *r1id, const bat *r2id)
{
- BAT *left, *right,*bn= NULL;
+ BAT *l, *r1, *r2 = NULL, *bn;
- if ((left = BATdescriptor(*lid)) == NULL) {
+ if ((l = BATdescriptor(*lid)) == NULL) {
throw(MAL, "algebra.projection", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
}
- if ((right = BATdescriptor(*rid)) == NULL) {
- BBPunfix(left->batCacheid);
+ if ((r1 = BATdescriptor(*r1id)) == NULL) {
+ BBPunfix(l->batCacheid);
throw(MAL, "algebra.projection", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
}
- bn = BATproject(left, right);
- BBPunfix(left->batCacheid);
- BBPunfix(right->batCacheid);
+ if (r2id && !is_bat_nil(*r2id) && (r2 = BATdescriptor(*r2id)) == NULL) {
+ BBPunfix(l->batCacheid);
+ BBPunfix(r1->batCacheid);
+ throw(MAL, "algebra.projection", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
+ }
+ bn = BATproject2(l, r1, r2);
+ BBPunfix(l->batCacheid);
+ BBPunfix(r1->batCacheid);
+ if (r2)
+ BBPunfix(r2->batCacheid);
if (bn == NULL)
throw(MAL, "algebra.projection", GDK_EXCEPTION);
*result = bn->batCacheid;
@@ -843,33 +851,10 @@ ALGprojection(bat *result, const bat *li
return MAL_SUCCEED;
}
-static str
-ALGprojection2(bat *result, const bat *lid, const bat *r1id, const bat *r2id)
+str
+ALGprojection(bat *result, const bat *lid, const bat *rid)
{
- BAT *l, *r1, *r2 = NULL, *bn;
-
- if ((l = BATdescriptor(*lid)) == NULL) {
- throw(MAL, "algebra.projection2", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
- }
- if ((r1 = BATdescriptor(*r1id)) == NULL) {
- BBPunfix(l->batCacheid);
- throw(MAL, "algebra.projection2", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
- }
- if (r2id && !is_bat_nil(*r2id) && (r2 = BATdescriptor(*r2id)) == NULL) {
- BBPunfix(l->batCacheid);
- BBPunfix(r1->batCacheid);
- throw(MAL, "algebra.projection2", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
- }
- bn = BATproject2(l, r1, r2);
- BBPunfix(l->batCacheid);
- BBPunfix(r1->batCacheid);
- if (r2)
- BBPunfix(r2->batCacheid);
- if (bn == NULL)
- throw(MAL, "algegra.projection2", GDK_EXCEPTION);
- *result = bn->batCacheid;
- BBPkeepref(*result);
- return MAL_SUCCEED;
+ return ALGprojection2(result, lid, rid, NULL);
}
static str
@@ -964,14 +949,25 @@ ALGsort11(bat *result, const bat *bid, c
}
static str
-ALGcount_bat(lng *result, const bat *bid)
+ALGcountCND_nil(lng *result, const bat *bid, const bat *cnd, const bit
*ignore_nils)
{
- BAT *b;
+ BAT *b, *s = NULL;
if ((b = BATdescriptor(*bid)) == NULL) {
throw(MAL, "aggr.count", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
}
- *result = (lng) BATcount(b);
+ if (cnd && !is_bat_nil(*cnd) && (s = BATdescriptor(*cnd)) == NULL) {
+ BBPunfix(b->batCacheid);
+ throw(MAL, "aggr.count", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
+ }
+ if (*ignore_nils) {
+ *result = (lng) BATcount_no_nil(b, s);
+ } else {
+ struct canditer ci;
+ *result = (lng) canditer_init(&ci, b, s);
+ }
+ if (s)
+ BBPunfix(s->batCacheid);
BBPunfix(b->batCacheid);
return MAL_SUCCEED;
}
@@ -979,72 +975,19 @@ ALGcount_bat(lng *result, const bat *bid
static str
ALGcount_nil(lng *result, const bat *bid, const bit *ignore_nils)
{
- BAT *b;
- BUN cnt;
-
- if ((b = BATdescriptor(*bid)) == NULL) {
- throw(MAL, "aggr.count", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
- }
- if (*ignore_nils)
- cnt = BATcount_no_nil(b, NULL);
- else
- cnt = BATcount(b);
- *result = (lng) cnt;
- BBPunfix(b->batCacheid);
- return MAL_SUCCEED;
-}
-
-static str
-ALGcount_no_nil(lng *result, const bat *bid)
-{
- bit ignore_nils = 1;
-
- return ALGcount_nil(result, bid, &ignore_nils);
+ return ALGcountCND_nil(result, bid, NULL, ignore_nils);
}
static str
ALGcountCND_bat(lng *result, const bat *bid, const bat *cnd)
{
- BAT *b;
-
- if ((b = BATdescriptor(*bid)) == NULL) {
- throw(MAL, "aggr.count", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
- }
- if (*cnd) {
- struct canditer ci;
- BAT *s;
- if ((s = BATdescriptor(*cnd)) == NULL) {
- BBPunfix(b->batCacheid);
- throw(MAL, "aggr.count", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
- }
- *result = (lng) canditer_init(&ci, b, s);
- BBPunfix(s->batCacheid);
- } else
- *result = (lng) BATcount(b);
- BBPunfix(b->batCacheid);
- return MAL_SUCCEED;
+ return ALGcountCND_nil(result, bid, cnd, &(bit){0});
}
static str
-ALGcountCND_nil(lng *result, const bat *bid, const bat *cnd, const bit
*ignore_nils)
+ALGcount_bat(lng *result, const bat *bid)
{
- BAT *b, *s = NULL;
-
- if (!*ignore_nils)
- return ALGcountCND_bat(result, bid, cnd);
- if (*cnd && (s = BATdescriptor(*cnd)) == NULL) {
- throw(MAL, "aggr.count", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
- }
- if ((b = BATdescriptor(*bid)) == NULL) {
- if (s)
- BBPunfix(s->batCacheid);
- throw(MAL, "aggr.count", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
- }
- *result = (lng) BATcount_no_nil(b, s);
- BBPunfix(b->batCacheid);
- if (s)
- BBPunfix(s->batCacheid);
- return MAL_SUCCEED;
+ return ALGcountCND_nil(result, bid, NULL, &(bit){0});
}
static str
@@ -1054,6 +997,12 @@ ALGcountCND_no_nil(lng *result, const ba
}
static str
+ALGcount_no_nil(lng *result, const bat *bid)
+{
+ return ALGcountCND_nil(result, bid, NULL, &(bit){1});
+}
+
+static str
ALGslice(bat *ret, const bat *bid, const lng *start, const lng *end)
{
BAT *b, *bn = NULL;
@@ -1495,9 +1444,9 @@ mel_func algebra_init_funcs[] = {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list