Changeset: 0703e21a01f9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0703e21a01f9
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
sql/backends/monet5/sql.c
sql/backends/monet5/sql_subquery.c
sql/backends/monet5/sql_subquery.h
sql/backends/monet5/sql_subquery.mal
Branch: default
Log Message:
Added candidate list support for subanyequal and suballnotequal versions
without rowids (ie 2 arguments)
diffs (truncated from 645 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
@@ -247,9 +247,11 @@ stdout of test 'MAL-signatures` in direc
[ "aggr", "str_group_concat", "pattern
aggr.str_group_concat(X_1:bat[:str], X_2:bat[:str], X_3:bit):str ",
"CMDBATstr_group_concat;", "" ]
[ "aggr", "str_group_concat", "pattern
aggr.str_group_concat(X_1:bat[:str], X_2:bit):str ",
"CMDBATstr_group_concat;", "" ]
[ "aggr", "suballnotequal", "command
aggr.suballnotequal(X_1:bat[:any_1], X_2:bat[:any_1], X_3:bat[:oid],
X_4:bat[:oid], X_5:bat[:oid], X_6:bit):bat[:bit] ",
"SQLallnotequal_grp2;", "" ]
-[ "aggr", "suballnotequal", "command
aggr.suballnotequal(X_1:bat[:any_1], X_2:bat[:any_1], X_3:bat[:oid],
X_4:bat[:oid], X_5:bit):bat[:bit] ", "SQLallnotequal_grp;", "" ]
+[ "aggr", "suballnotequal", "pattern
aggr.suballnotequal(X_1:bat[:any_1], X_2:bat[:any_1], X_3:bat[:oid],
X_4:bat[:oid], X_5:bat[:oid], X_6:bit):bat[:bit] ",
"SQLallnotequal_grp;", "" ]
+[ "aggr", "suballnotequal", "pattern
aggr.suballnotequal(X_1:bat[:any_1], X_2:bat[:any_1], X_3:bat[:oid],
X_4:bat[:oid], X_5:bit):bat[:bit] ", "SQLallnotequal_grp;", "" ]
[ "aggr", "subanyequal", "command aggr.subanyequal(X_1:bat[:any_1],
X_2:bat[:any_1], X_3:bat[:oid], X_4:bat[:oid], X_5:bat[:oid],
X_6:bit):bat[:bit] ", "SQLanyequal_grp2;", "" ]
-[ "aggr", "subanyequal", "command aggr.subanyequal(X_1:bat[:any_1],
X_2:bat[:any_1], X_3:bat[:oid], X_4:bat[:oid], X_5:bit):bat[:bit] ",
"SQLanyequal_grp;", "" ]
+[ "aggr", "subanyequal", "pattern aggr.subanyequal(X_1:bat[:any_1],
X_2:bat[:any_1], X_3:bat[:oid], X_4:bat[:oid], X_5:bat[:oid],
X_6:bit):bat[:bit] ", "SQLanyequal_grp;", "" ]
+[ "aggr", "subanyequal", "pattern aggr.subanyequal(X_1:bat[:any_1],
X_2:bat[:any_1], X_3:bat[:oid], X_4:bat[:oid], X_5:bit):bat[:bit] ",
"SQLanyequal_grp;", "" ]
[ "aggr", "subavg", "command aggr.subavg(X_1:bat[:bte],
X_2:bat[:oid], X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",
"AGGRsubavg1_dbl;", "" ]
[ "aggr", "subavg", "command aggr.subavg(X_1:bat[:dbl],
X_2:bat[:oid], X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",
"AGGRsubavg1_dbl;", "" ]
[ "aggr", "subavg", "command aggr.subavg(X_1:bat[:flt],
X_2:bat[:oid], X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",
"AGGRsubavg1_dbl;", "" ]
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
@@ -287,9 +287,11 @@ stdout of test 'MAL-signatures` in direc
[ "aggr", "str_group_concat", "pattern
aggr.str_group_concat(X_1:bat[:str], X_2:bat[:str], X_3:bit):str ",
"CMDBATstr_group_concat;", "" ]
[ "aggr", "str_group_concat", "pattern
aggr.str_group_concat(X_1:bat[:str], X_2:bit):str ",
"CMDBATstr_group_concat;", "" ]
[ "aggr", "suballnotequal", "command
aggr.suballnotequal(X_1:bat[:any_1], X_2:bat[:any_1], X_3:bat[:oid],
X_4:bat[:oid], X_5:bat[:oid], X_6:bit):bat[:bit] ",
"SQLallnotequal_grp2;", "" ]
-[ "aggr", "suballnotequal", "command
aggr.suballnotequal(X_1:bat[:any_1], X_2:bat[:any_1], X_3:bat[:oid],
X_4:bat[:oid], X_5:bit):bat[:bit] ", "SQLallnotequal_grp;", "" ]
+[ "aggr", "suballnotequal", "pattern
aggr.suballnotequal(X_1:bat[:any_1], X_2:bat[:any_1], X_3:bat[:oid],
X_4:bat[:oid], X_5:bat[:oid], X_6:bit):bat[:bit] ",
"SQLallnotequal_grp;", "" ]
+[ "aggr", "suballnotequal", "pattern
aggr.suballnotequal(X_1:bat[:any_1], X_2:bat[:any_1], X_3:bat[:oid],
X_4:bat[:oid], X_5:bit):bat[:bit] ", "SQLallnotequal_grp;", "" ]
[ "aggr", "subanyequal", "command aggr.subanyequal(X_1:bat[:any_1],
X_2:bat[:any_1], X_3:bat[:oid], X_4:bat[:oid], X_5:bat[:oid],
X_6:bit):bat[:bit] ", "SQLanyequal_grp2;", "" ]
-[ "aggr", "subanyequal", "command aggr.subanyequal(X_1:bat[:any_1],
X_2:bat[:any_1], X_3:bat[:oid], X_4:bat[:oid], X_5:bit):bat[:bit] ",
"SQLanyequal_grp;", "" ]
+[ "aggr", "subanyequal", "pattern aggr.subanyequal(X_1:bat[:any_1],
X_2:bat[:any_1], X_3:bat[:oid], X_4:bat[:oid], X_5:bat[:oid],
X_6:bit):bat[:bit] ", "SQLanyequal_grp;", "" ]
+[ "aggr", "subanyequal", "pattern aggr.subanyequal(X_1:bat[:any_1],
X_2:bat[:any_1], X_3:bat[:oid], X_4:bat[:oid], X_5:bit):bat[:bit] ",
"SQLanyequal_grp;", "" ]
[ "aggr", "subavg", "command aggr.subavg(X_1:bat[:bte],
X_2:bat[:oid], X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",
"AGGRsubavg1_dbl;", "" ]
[ "aggr", "subavg", "command aggr.subavg(X_1:bat[:dbl],
X_2:bat[:oid], X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",
"AGGRsubavg1_dbl;", "" ]
[ "aggr", "subavg", "command aggr.subavg(X_1:bat[:flt],
X_2:bat[:oid], X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",
"AGGRsubavg1_dbl;", "" ]
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -6625,21 +6625,23 @@ static mel_func sql_init_funcs[] = {
command("sql", "zero_or_one", zero_or_one, false, "if col contains exactly
one value return this. Incase of more raise an exception else return nil",
args(1,2, argany("",1),batargany("col",1))),
command("sql", "zero_or_one", zero_or_one_error, false, "if col contains
exactly one value return this. Incase of more raise an exception if err is true
else return nil", args(1,3, argany("",1),batargany("col",1),arg("err",bit))),
command("sql", "zero_or_one", zero_or_one_error_bat, false, "if col contains
exactly one value return this. Incase of more raise an exception if err is true
else return nil", args(1,3, argany("",1),batargany("col",1),batarg("err",bit))),
- command("sql", "subzero_or_one", SQLsubzero_or_one, false, "", args(1,5,
batargany("",1),batargany("b",1),batarg("gp",oid),batarg("gpe",oid),arg("no_nil",bit))),
+ command("sql", "subzero_or_one", SQLsubzero_or_one, false, "", args(1,5,
batargany("",1),batargany("b",1),batarg("g",oid),batarg("e",oid),arg("no_nil",bit))),
command("sql", "all", SQLall, false, "if all values in col are equal return
this, else nil", args(1,2, argany("",1),batargany("col",1))),
- command("sql", "suball", SQLall_grp, false, "if all values in l are equal
(per group) return the value, else nil", args(1,5,
batargany("",1),batargany("l",1),batarg("gp",oid),batarg("gpe",oid),arg("no_nil",bit))),
+ command("sql", "suball", SQLall_grp, false, "if all values in l are equal
(per group) return the value, else nil", args(1,5,
batargany("",1),batargany("l",1),batarg("g",oid),batarg("e",oid),arg("no_nil",bit))),
command("sql", "null", SQLnil, false, "if b has a nil return true, else
false", args(1,2, arg("",bit),batargany("b",1))),
- command("sql", "subnull", SQLnil_grp, false, "if any value in l is nil with
in a group return true for that group, else false", args(1,5,
batarg("",bit),batargany("l",1),batarg("gp",oid),batarg("gpe",oid),arg("no_nil",bit))),
+ command("sql", "subnull", SQLnil_grp, false, "if any value in l is nil with
in a group return true for that group, else false", args(1,5,
batarg("",bit),batargany("l",1),batarg("g",oid),batarg("e",oid),arg("no_nil",bit))),
command("sql", "any", SQLany_cmp, false, "if cmp then true, (nl or nr) nil
then nil, else false", args(1,4,
arg("",bit),arg("cmp",bit),arg("nl",bit),arg("nr",bit))),
command("sql", "all", SQLall_cmp, false, "if !cmp then false, (nl or nr) then
nil, else true", args(1,4,
arg("",bit),arg("cmp",bit),arg("nl",bit),arg("nr",bit))),
// pattern("aggr", "anyequal", CMDvarEQ, false, "", args(1,3,
arg("",bit),argany("l",1),argany("r",1))),
// pattern("aggr", "not_anyequal", CMDvarNE, false, "", args(1,3,
arg("",bit),argany("l",1),argany("r",1))),
command("aggr", "anyequal", SQLanyequal, false, "if any value in r is equal
to l return true, else if r has nil nil else false", args(1,3,
arg("",bit),batargany("l",1),batargany("r",1))),
command("aggr", "allnotequal", SQLallnotequal, false, "if all values in r are
not equal to l return true, else if r has nil nil else false", args(1,3,
arg("",bit),batargany("l",1),batargany("r",1))),
- command("aggr", "subanyequal", SQLanyequal_grp, false, "if any value in r is
equal to l return true, else if r has nil nil else false", args(1,6,
batarg("",bit),batargany("l",1),batargany("r",1),batarg("gp",oid),batarg("gpe",oid),arg("no_nil",bit))),
- command("aggr", "subanyequal", SQLanyequal_grp2, false, "if any value in r is
equal to l return true, else if r has nil nil else false, except if rid is nil
(ie empty) then false", args(1,7,
batarg("",bit),batargany("l",1),batargany("r",1),batarg("rid",oid),batarg("gp",oid),batarg("gpe",oid),arg("no_nil",bit))),
- command("aggr", "suballnotequal", SQLallnotequal_grp, false, "if all values
in r are not equal to l return true, else if r has nil nil else false",
args(1,6,
batarg("",bit),batargany("l",1),batargany("r",1),batarg("gp",oid),batarg("gpe",oid),arg("no_nil",bit))),
- command("aggr", "suballnotequal", SQLallnotequal_grp2, false, "if all values
in r are not equal to l return true, else if r has nil nil else false, except
if rid is nil (ie empty) then true", args(1,7,
batarg("",bit),batargany("l",1),batargany("r",1),batarg("rid",oid),batarg("gp",oid),batarg("gpe",oid),arg("no_nil",bit))),
+ pattern("aggr", "subanyequal", SQLanyequal_grp, false, "if any value in r is
equal to l return true, else if r has nil nil else false", args(1,6,
batarg("",bit),batargany("l",1),batargany("r",1),batarg("g",oid),batarg("e",oid),arg("no_nil",bit))),
+ pattern("aggr", "subanyequal", SQLanyequal_grp, false, "if any value in r is
equal to l return true, else if r has nil nil else false; with candidate list",
args(1,7,
batarg("",bit),batargany("l",1),batargany("r",1),batarg("g",oid),batarg("e",oid),batarg("s",oid),arg("no_nil",bit))),
+ command("aggr", "subanyequal", SQLanyequal_grp2, false, "if any value in r is
equal to l return true, else if r has nil nil else false, except if rid is nil
(ie empty) then false", args(1,7,
batarg("",bit),batargany("l",1),batargany("r",1),batarg("rid",oid),batarg("g",oid),batarg("e",oid),arg("no_nil",bit))),
+ pattern("aggr", "suballnotequal", SQLallnotequal_grp, false, "if all values
in r are not equal to l return true, else if r has nil nil else false",
args(1,6,
batarg("",bit),batargany("l",1),batargany("r",1),batarg("g",oid),batarg("e",oid),arg("no_nil",bit))),
+ pattern("aggr", "suballnotequal", SQLallnotequal_grp, false, "if all values
in r are not equal to l return true, else if r has nil nil else false; with
candidate list", args(1,7,
batarg("",bit),batargany("l",1),batargany("r",1),batarg("g",oid),batarg("e",oid),batarg("s",oid),arg("no_nil",bit))),
+ command("aggr", "suballnotequal", SQLallnotequal_grp2, false, "if all values
in r are not equal to l return true, else if r has nil nil else false, except
if rid is nil (ie empty) then true", args(1,7,
batarg("",bit),batargany("l",1),batargany("r",1),batarg("rid",oid),batarg("g",oid),batarg("e",oid),arg("no_nil",bit))),
// command("aggr", "exist", ALGexist, false, "", args(1,3,
arg("",bit),batargany("b",2),argany("h",1))),
pattern("aggr", "exist", SQLexist, false, "", args(1,2, arg("",bit),
argany("b",1))),
pattern("bataggr", "exist", SQLexist, false, "", args(1,2, batarg("",bit),
argany("b",1))),
diff --git a/sql/backends/monet5/sql_subquery.c
b/sql/backends/monet5/sql_subquery.c
--- a/sql/backends/monet5/sql_subquery.c
+++ b/sql/backends/monet5/sql_subquery.c
@@ -564,63 +564,99 @@ SQLanyequal(bit *ret, const bat *bid1, c
return MAL_SUCCEED;
}
-#define SQLanyequal_or_not_grp_imp(TPE, TEST) \
- do { \
- TPE *lp = (TPE*)Tloc(l, 0), *rp = (TPE*)Tloc(r, 0); \
- for (BUN q = offset, s = 0; s < o; q++, s++) { \
- TPE lv = lp[q], rv = rp[q]; \
- oid id = *(oid*)BUNtail(gi, s); \
- if (ret[id] != TEST) { \
- if (is_##TPE##_nil(lv) || is_##TPE##_nil(rv)) {
\
- ret[id] = bit_nil; \
- hasnil = 1; \
- } else if (lv == rv) { \
- ret[id] = TEST; \
+#define SQLanyequal_or_not_grp_imp(TYPE, TEST) \
+ do { \
+ const TYPE *vals1 = (const TYPE *) Tloc(l, 0); \
+ const TYPE *vals2 = (const TYPE *) Tloc(r, 0); \
+ while (ncand > 0) { \
+ ncand--; \
+ i = canditer_next(&ci) - l->hseqbase; \
+ if (gids == NULL || \
+ (gids[i] >= min && gids[i] <= max)) { \
+ if (gids) \
+ gid = gids[i] - min; \
+ else \
+ gid = (oid) i; \
+ if (ret[gid] != TEST) { \
+ if (is_##TYPE##_nil(vals1[i]) ||
is_##TYPE##_nil(vals2[i])) { \
+ ret[gid] = bit_nil; \
+ hasnil = 1; \
+ } else if (vals1[i] == vals2[i]) { \
+ ret[gid] = TEST; \
+ } \
} \
} \
} \
} while (0)
str
-SQLanyequal_grp(bat *ret, const bat *bid1, const bat *bid2, const bat *gp,
const bat *gpe, bit *no_nil)
+SQLanyequal_grp(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
- BAT *l, *r, *g, *e, *res;
- bit F = FALSE, hasnil = 0;
- BUN offset = 0;
+ bat *ret = getArgReference_bat(stk, pci, 0);
+ bat *lp = getArgReference_bat(stk, pci, 1);
+ bat *rp = getArgReference_bat(stk, pci, 2);
+ bat *gp = getArgReference_bat(stk, pci, 3);
+ bat *gpe = getArgReference_bat(stk, pci, 4);
+ bat *sp = pci->argc == 7 ? getArgReference_bat(stk, pci, 5) : NULL;
+ //bit *no_nil = getArgReference_bit(stk, pci, pci->argc == 7 ? 6 : 5);
no_nil argument is ignored
+ BAT *l = NULL, *r = NULL, *g = NULL, *e = NULL, *s = NULL, *res = NULL;
+ const oid *restrict gids;
+ oid gid, min, max;
+ BUN i, ngrp, ncand;
+ struct canditer ci;
+ str msg = MAL_SUCCEED;
+ bit hasnil = 0;
- (void)no_nil;
- if ((l = BATdescriptor(*bid1)) == NULL) {
- throw(SQL, "sql.any =", SQLSTATE(HY005) "Cannot access column
descriptor");
+ (void)cntxt;
+ (void)mb;
+ if ((l = BATdescriptor(*lp)) == NULL) {
+ msg = createException(SQL, "sql.any =", SQLSTATE(HY005) "Cannot
access column descriptor");
+ goto bailout;
}
- if ((r = BATdescriptor(*bid2)) == NULL) {
- BBPunfix(l->batCacheid);
- throw(SQL, "sql.any =", SQLSTATE(HY005) "Cannot access column
descriptor");
+ if ((r = BATdescriptor(*rp)) == NULL) {
+ msg = createException(SQL, "sql.any =", SQLSTATE(HY005) "Cannot
access column descriptor");
+ goto bailout;
}
if ((g = BATdescriptor(*gp)) == NULL) {
- BBPunfix(l->batCacheid);
- BBPunfix(r->batCacheid);
- throw(SQL, "sql.any =", SQLSTATE(HY005) "Cannot access column
descriptor");
+ msg = createException(SQL, "sql.any =", SQLSTATE(HY005) "Cannot
access column descriptor");
+ goto bailout;
}
if ((e = BATdescriptor(*gpe)) == NULL) {
- BBPunfix(l->batCacheid);
- BBPunfix(r->batCacheid);
- BBPunfix(g->batCacheid);
- throw(SQL, "sql.any =", SQLSTATE(HY005) "Cannot access column
descriptor");
+ msg = createException(SQL, "sql.any =", SQLSTATE(HY005) "Cannot
access column descriptor");
+ goto bailout;
+ }
+ if (sp && (s = BATdescriptor(*sp)) == NULL) {
+ msg = createException(SQL, "sql.any =", SQLSTATE(HY005) "Cannot
access column descriptor");
+ goto bailout;
+ }
+
+ if ((msg = (str)BATgroupaggrinit(l, g, e, s, &min, &max, &ngrp, &ci,
&ncand)) != NULL)
+ goto bailout;
+ if (g == NULL) {
+ msg = createException(SQL, "sql.any =", SQLSTATE(HY005) "l, r
and g must be aligned");
+ goto bailout;
}
- if ((res = BATconstant(0, TYPE_bit, &F, BATcount(e), TRANSIENT)) ==
NULL) {
- BBPunfix(l->batCacheid);
- BBPunfix(r->batCacheid);
- BBPunfix(g->batCacheid);
- BBPunfix(e->batCacheid);
- throw(SQL, "sql.any =", SQLSTATE(HY013) MAL_MALLOC_FAIL);
- }
- BAThseqbase(res, e->hseqbase);
- assert(BATcount(l) == BATcount(r));
- offset = g->hseqbase - l->hseqbase;
- if (BATcount(g) > 0) {
- bit *restrict ret = (bit*)Tloc(res, 0);
- BATiter gi = bat_iterator(g);
- BUN o = BUNlast(g);
+
+ if (BATcount(l) == 0 || ngrp == 0) {
+ bit F = FALSE;
+ if ((res = BATconstant(ngrp == 0 ? 0 : min, TYPE_bit, &F, ngrp,
TRANSIENT)) == NULL) {
+ msg = createException(SQL, "sql.any =", SQLSTATE(HY005)
"Cannot access column descriptor");
+ goto bailout;
+ }
+ } else {
+ bit *restrict ret;
+
+ if ((res = COLnew(min, TYPE_bit, ngrp, TRANSIENT)) == NULL) {
+ msg = createException(SQL, "sql.any =", SQLSTATE(HY005)
"Cannot access column descriptor");
+ goto bailout;
+ }
+ ret = (bit *) Tloc(res, 0);
+ memset(ret, FALSE, ngrp * sizeof(bit));
+
+ if (!g || BATtdense(g))
+ gids = NULL;
+ else
+ gids = (const oid *) Tloc(g, 0);
switch (l->ttype) {
case TYPE_bit:
@@ -654,33 +690,52 @@ SQLanyequal_grp(bat *ret, const bat *bid
const void *nilp = ATOMnilptr(l->ttype);
BATiter li = bat_iterator(l), ri = bat_iterator(r);
- for (BUN q = offset, s = 0; s < o; q++, s++) {
- const void *lv = BUNtail(li, q);
- const void *rv = BUNtail(ri, q);
- const oid id = *(oid*)BUNtail(gi, s);
-
- if (ret[id] != TRUE) {
- if (ocmp(lv, nilp) == 0 || ocmp(rv,
nilp) == 0) {
- ret[id] = bit_nil;
- hasnil = 1;
- } else if (ocmp(lv, rv) == 0)
- ret[id] = TRUE;
+ while (ncand > 0) {
+ ncand--;
+ i = canditer_next(&ci) - l->hseqbase;
+ if (gids == NULL ||
+ (gids[i] >= min && gids[i] <= max)) {
+ if (gids)
+ gid = gids[i] - min;
+ else
+ gid = (oid) i;
+ if (ret[gid] != TRUE) {
+ const void *lv = BUNtail(li, i);
+ const void *rv = BUNtail(ri, i);
+ if (ocmp(lv, nilp) == 0 ||
ocmp(rv, nilp) == 0) {
+ ret[gid] = bit_nil;
+ hasnil = 1;
+ } else if (ocmp(lv, rv) == 0)
+ ret[gid] = TRUE;
+ }
}
}
}
}
+ BATsetcount(res, ngrp);
+ res->tkey = BATcount(res) <= 1;
+ res->tsorted = BATcount(res) <= 1;
+ res->trevsorted = BATcount(res) <= 1;
+ res->tnil = hasnil != 0;
+ res->tnonil = hasnil == 0;
}
- res->hseqbase = g->hseqbase;
- res->tnil = hasnil != 0;
- res->tnonil = hasnil == 0;
- res->tsorted = res->trevsorted = 0;
- res->tkey = 0;
- BBPunfix(l->batCacheid);
- BBPunfix(r->batCacheid);
- BBPunfix(g->batCacheid);
- BBPunfix(e->batCacheid);
- BBPkeepref(*ret = res->batCacheid);
- return MAL_SUCCEED;
+
+bailout:
+ if (res && !msg)
+ BBPkeepref(*ret = res->batCacheid);
+ else if (res)
+ BBPreclaim(res);
+ if (l)
+ BBPunfix(l->batCacheid);
+ if (r)
+ BBPunfix(r->batCacheid);
+ if (g)
+ BBPunfix(g->batCacheid);
+ if (e)
+ BBPunfix(e->batCacheid);
+ if (s)
+ BBPunfix(s->batCacheid);
+ return msg;
}
#define SQLanyequal_or_not_grp2_imp(TPE, VAL1, VAL2) \
@@ -882,45 +937,73 @@ SQLallnotequal(bit *ret, const bat *bid1
}
str
-SQLallnotequal_grp(bat *ret, const bat *bid1, const bat *bid2, const bat *gp,
const bat *gpe, bit *no_nil)
+SQLallnotequal_grp(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
- BAT *l, *r, *g, *e, *res;
- bit T = TRUE, hasnil = 0;
- BUN offset = 0;
+ bat *ret = getArgReference_bat(stk, pci, 0);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list