Changeset: dc90f734a15e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/dc90f734a15e
Modified Files:
clients/Tests/exports.stable.out
gdk/gdk.h
gdk/gdk_analytic.h
gdk/gdk_analytic_bounds.c
gdk/gdk_analytic_func.c
gdk/gdk_analytic_statistics.c
sql/backends/monet5/sql_rank.c
Branch: default
Log Message:
Move COLnew calls into GDK layer for GDKanalytical* functions.
diffs (truncated from 2326 to 300 lines):
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
@@ -180,7 +180,7 @@ gdk_return BATprod(void *res, int tp, BA
BAT *BATproject(BAT *restrict l, BAT *restrict r);
BAT *BATproject2(BAT *restrict l, BAT *restrict r1, BAT *restrict r2);
BAT *BATprojectchain(BAT **bats);
-gdk_return BATrangejoin(BAT **r1p, BAT **r2p, BAT *l, BAT *rl, BAT *rh, BAT
*sl, BAT *sr, bool li, bool hi, bool anti, bool symmetric, BUN estimate)
__attribute__((__warn_unused_result__));
+gdk_return BATrangejoin(BAT **r1p, BAT **r2p, BAT *l, BAT *rl, BAT *rh, BAT
*sl, BAT *sr, bool li, bool hi, bool anti, bool symmetric, BUN estimate)
__attribute__((__access__(write_only, 1)))
__attribute__((__access__(write_only, 2)))
__attribute__((__warn_unused_result__));
gdk_return BATreplace(BAT *b, BAT *p, BAT *n, bool force)
__attribute__((__warn_unused_result__));
void BATrmprop(BAT *b, enum prop_t idx);
void BATrmprop_nolock(BAT *b, enum prop_t idx);
@@ -246,29 +246,29 @@ BAT *COLnew(oid hseq, int tltype, BUN ca
BAT *COLnew2(oid hseq, int tt, BUN cap, role_t role, uint16_t width)
__attribute__((__warn_unused_result__));
size_t GDK_mem_maxsize;
size_t GDK_vm_maxsize;
-gdk_return GDKanalytical_correlation(BAT *r, BAT *p, BAT *o, BAT *b1, BAT *b2,
BAT *s, BAT *e, int tpe, int frame_type);
-gdk_return GDKanalytical_covariance_pop(BAT *r, BAT *p, BAT *o, BAT *b1, BAT
*b2, BAT *s, BAT *e, int tpe, int frame_type);
-gdk_return GDKanalytical_covariance_samp(BAT *r, BAT *p, BAT *o, BAT *b1, BAT
*b2, BAT *s, BAT *e, int tpe, int frame_type);
-gdk_return GDKanalytical_stddev_pop(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s,
BAT *e, int tpe, int frame_type);
-gdk_return GDKanalytical_stddev_samp(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s,
BAT *e, int tpe, int frame_type);
+BAT *GDKanalytical_correlation(BAT *p, BAT *o, BAT *b1, BAT *b2, BAT *s, BAT
*e, int tpe, int frame_type) __attribute__((__warn_unused_result__));
+BAT *GDKanalytical_covariance_pop(BAT *p, BAT *o, BAT *b1, BAT *b2, BAT *s,
BAT *e, int tpe, int frame_type) __attribute__((__warn_unused_result__));
+BAT *GDKanalytical_covariance_samp(BAT *p, BAT *o, BAT *b1, BAT *b2, BAT *s,
BAT *e, int tpe, int frame_type) __attribute__((__warn_unused_result__));
+BAT *GDKanalytical_stddev_pop(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tpe,
int frame_type) __attribute__((__warn_unused_result__));
+BAT *GDKanalytical_stddev_samp(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int
tpe, int frame_type) __attribute__((__warn_unused_result__));
gdk_return GDKanalytical_str_group_concat(BAT *r, BAT *p, BAT *o, BAT *b, BAT
*sep, BAT *s, BAT *e, const char *restrict separator, int frame_type);
-gdk_return GDKanalytical_variance_pop(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s,
BAT *e, int tpe, int frame_type);
-gdk_return GDKanalytical_variance_samp(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s,
BAT *e, int tpe, int frame_type);
-gdk_return GDKanalyticalavg(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e,
int tpe, int frame_type);
-gdk_return GDKanalyticalavginteger(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT
*e, int tpe, int frame_type);
-gdk_return GDKanalyticalcount(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e,
bit ignore_nils, int tpe, int frame_type);
-gdk_return GDKanalyticaldiff(BAT *r, BAT *b, BAT *p, const bit *restrict
npbit, int tpe);
-gdk_return GDKanalyticalfirst(BAT *r, BAT *b, BAT *s, BAT *e, int tpe);
-gdk_return GDKanalyticallag(BAT *r, BAT *b, BAT *p, BUN lag, const void
*restrict default_value, int tpe);
-gdk_return GDKanalyticallast(BAT *r, BAT *b, BAT *s, BAT *e, int tpe);
-gdk_return GDKanalyticallead(BAT *r, BAT *b, BAT *p, BUN lead, const void
*restrict default_value, int tpe);
-gdk_return GDKanalyticalmax(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e,
int tpe, int frame_type);
-gdk_return GDKanalyticalmin(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e,
int tpe, int frame_type);
-gdk_return GDKanalyticalnthvalue(BAT *r, BAT *b, BAT *s, BAT *e, BAT *l, lng
*nth, int tp1);
-gdk_return GDKanalyticalntile(BAT *r, BAT *b, BAT *p, BAT *n, int tpe, const
void *restrict ntile);
-gdk_return GDKanalyticalprod(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e,
int tp1, int tp2, int frame_type);
-gdk_return GDKanalyticalsum(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e,
int tp1, int tp2, int frame_type);
-gdk_return GDKanalyticalwindowbounds(BAT *r, BAT *b, BAT *p, BAT *l, const
void *restrict bound, int tp1, int tp2, int unit, bool preceding, oid
first_half);
+BAT *GDKanalytical_variance_pop(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int
tpe, int frame_type) __attribute__((__warn_unused_result__));
+BAT *GDKanalytical_variance_samp(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int
tpe, int frame_type) __attribute__((__warn_unused_result__));
+BAT *GDKanalyticalavg(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tpe, int
frame_type) __attribute__((__warn_unused_result__));
+BAT *GDKanalyticalavginteger(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tpe,
int frame_type) __attribute__((__warn_unused_result__));
+BAT *GDKanalyticalcount(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, bit
ignore_nils, int tpe, int frame_type) __attribute__((__warn_unused_result__));
+BAT *GDKanalyticaldiff(BAT *b, BAT *p, const bit *restrict npbit, int tpe)
__attribute__((__warn_unused_result__));
+BAT *GDKanalyticalfirst(BAT *b, BAT *s, BAT *e, int tpe)
__attribute__((__warn_unused_result__));
+BAT *GDKanalyticallag(BAT *b, BAT *p, BUN lag, const void *restrict
default_value, int tpe) __attribute__((__warn_unused_result__));
+BAT *GDKanalyticallast(BAT *b, BAT *s, BAT *e, int tpe)
__attribute__((__warn_unused_result__));
+BAT *GDKanalyticallead(BAT *b, BAT *p, BUN lead, const void *restrict
default_value, int tpe) __attribute__((__warn_unused_result__));
+BAT *GDKanalyticalmax(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tpe, int
frame_type) __attribute__((__warn_unused_result__));
+BAT *GDKanalyticalmin(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tpe, int
frame_type) __attribute__((__warn_unused_result__));
+BAT *GDKanalyticalnthvalue(BAT *b, BAT *s, BAT *e, BAT *l, lng *nth, int tp1)
__attribute__((__warn_unused_result__));
+BAT *GDKanalyticalntile(BAT *b, BAT *p, BAT *n, int tpe, const void *restrict
ntile) __attribute__((__warn_unused_result__));
+BAT *GDKanalyticalprod(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tp1, int
tp2, int frame_type) __attribute__((__warn_unused_result__));
+BAT *GDKanalyticalsum(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tp1, int
tp2, int frame_type) __attribute__((__warn_unused_result__));
+BAT *GDKanalyticalwindowbounds(BAT *b, BAT *p, BAT *l, const void *restrict
bound, int tp1, int tp2, int unit, bool preceding, oid first_half)
__attribute__((__warn_unused_result__));
gdk_return GDKasciify(char **restrict buf, size_t *restrict buflen, const char
*restrict s);
int GDKatomcnt;
gdk_return GDKcasefold(char **restrict buf, size_t *restrict buflen, const
char *restrict s) __attribute__((__access__(read_write, 1)))
__attribute__((__access__(read_write, 2)));
@@ -292,7 +292,7 @@ bool GDKgetenv_istext(const char *name,
bool GDKgetenv_istrue(const char *name);
bool GDKgetenv_isyes(const char *name);
gdk_return GDKinit(struct opt *set, int setlen, bool embedded, const char
*caller_revision);
-BAT *GDKinitialize_segment_tree(void);
+BAT *GDKinitialize_segment_tree(void) __attribute__((__warn_unused_result__));
bool GDKinmemory(int farmid);
const char *GDKlibversion(void) __attribute__((__const__));
ATOMIC_TYPE GDKlockcnt;
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2329,6 +2329,8 @@ gdk_export gdk_return BATbandjoin(BAT **
__attribute__((__access__(write_only, 2)))
__attribute__((__warn_unused_result__));
gdk_export gdk_return BATrangejoin(BAT **r1p, BAT **r2p, BAT *l, BAT *rl, BAT
*rh, BAT *sl, BAT *sr, bool li, bool hi, bool anti, bool symmetric, BUN
estimate)
+ __attribute__((__access__(write_only, 1)))
+ __attribute__((__access__(write_only, 2)))
__attribute__((__warn_unused_result__));
gdk_export BAT *BATproject(BAT *restrict l, BAT *restrict r);
gdk_export BAT *BATproject2(BAT *restrict l, BAT *restrict r1, BAT *restrict
r2);
diff --git a/gdk/gdk_analytic.h b/gdk/gdk_analytic.h
--- a/gdk/gdk_analytic.h
+++ b/gdk/gdk_analytic.h
@@ -18,36 +18,58 @@
#ifndef _GDK_ANALYTIC_H_
#define _GDK_ANALYTIC_H_
-gdk_export gdk_return GDKanalyticaldiff(BAT *r, BAT *b, BAT *p, const bit
*restrict npbit, int tpe);
+gdk_export BAT *GDKanalyticaldiff(BAT *b, BAT *p, const bit *restrict npbit,
int tpe)
+ __attribute__((__warn_unused_result__));
-gdk_export gdk_return GDKanalyticalntile(BAT *r, BAT *b, BAT *p, BAT *n, int
tpe, const void *restrict ntile);
-gdk_export gdk_return GDKanalyticallag(BAT *r, BAT *b, BAT *p, BUN lag, const
void *restrict default_value, int tpe);
-gdk_export gdk_return GDKanalyticallead(BAT *r, BAT *b, BAT *p, BUN lead,
const void *restrict default_value, int tpe);
+gdk_export BAT *GDKanalyticalntile(BAT *b, BAT *p, BAT *n, int tpe, const void
*restrict ntile)
+ __attribute__((__warn_unused_result__));
+gdk_export BAT *GDKanalyticallag(BAT *b, BAT *p, BUN lag, const void *restrict
default_value, int tpe)
+ __attribute__((__warn_unused_result__));
+gdk_export BAT *GDKanalyticallead(BAT *b, BAT *p, BUN lead, const void
*restrict default_value, int tpe)
+ __attribute__((__warn_unused_result__));
-gdk_export gdk_return GDKanalyticalwindowbounds(BAT *r, BAT *b, BAT *p, BAT *l,
- const void *restrict bound,
- int tp1, int tp2, int unit,
- bool preceding, oid first_half);
+gdk_export BAT *GDKanalyticalwindowbounds(BAT *b, BAT *p, BAT *l,
+ const void *restrict bound,
+ int tp1, int tp2, int unit,
+ bool preceding, oid first_half)
+ __attribute__((__warn_unused_result__));
-gdk_export gdk_return GDKanalyticalfirst(BAT *r, BAT *b, BAT *s, BAT *e, int
tpe);
-gdk_export gdk_return GDKanalyticallast(BAT *r, BAT *b, BAT *s, BAT *e, int
tpe);
-gdk_export gdk_return GDKanalyticalnthvalue(BAT *r, BAT *b, BAT *s, BAT *e,
BAT *l, lng *nth, int tp1);
+gdk_export BAT *GDKanalyticalfirst(BAT *b, BAT *s, BAT *e, int tpe)
+ __attribute__((__warn_unused_result__));
+gdk_export BAT *GDKanalyticallast(BAT *b, BAT *s, BAT *e, int tpe)
+ __attribute__((__warn_unused_result__));
+gdk_export BAT *GDKanalyticalnthvalue(BAT *b, BAT *s, BAT *e, BAT *l, lng
*nth, int tp1)
+ __attribute__((__warn_unused_result__));
-gdk_export gdk_return GDKanalyticalmin(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s,
BAT *e, int tpe, int frame_type);
-gdk_export gdk_return GDKanalyticalmax(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s,
BAT *e, int tpe, int frame_type);
-gdk_export gdk_return GDKanalyticalcount(BAT *r, BAT *p, BAT *o, BAT *b, BAT
*s, BAT *e, bit ignore_nils, int tpe, int frame_type);
-gdk_export gdk_return GDKanalyticalsum(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s,
BAT *e, int tp1, int tp2, int frame_type);
-gdk_export gdk_return GDKanalyticalprod(BAT *r, BAT *p, BAT *o, BAT *b, BAT
*s, BAT *e, int tp1, int tp2, int frame_type);
-gdk_export gdk_return GDKanalyticalavg(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s,
BAT *e, int tpe, int frame_type);
-gdk_export gdk_return GDKanalyticalavginteger(BAT *r, BAT *p, BAT *o, BAT *b,
BAT *s, BAT *e, int tpe, int frame_type);
+gdk_export BAT *GDKanalyticalmin(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int
tpe, int frame_type)
+ __attribute__((__warn_unused_result__));
+gdk_export BAT *GDKanalyticalmax(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int
tpe, int frame_type)
+ __attribute__((__warn_unused_result__));
+gdk_export BAT *GDKanalyticalcount(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, bit
ignore_nils, int tpe, int frame_type)
+ __attribute__((__warn_unused_result__));
+gdk_export BAT *GDKanalyticalsum(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int
tp1, int tp2, int frame_type)
+ __attribute__((__warn_unused_result__));
+gdk_export BAT *GDKanalyticalprod(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int
tp1, int tp2, int frame_type)
+ __attribute__((__warn_unused_result__));
+gdk_export BAT *GDKanalyticalavg(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int
tpe, int frame_type)
+ __attribute__((__warn_unused_result__));
+gdk_export BAT *GDKanalyticalavginteger(BAT *p, BAT *o, BAT *b, BAT *s, BAT
*e, int tpe, int frame_type)
+ __attribute__((__warn_unused_result__));
-gdk_export gdk_return GDKanalytical_stddev_samp(BAT *r, BAT *p, BAT *o, BAT
*b, BAT *s, BAT *e, int tpe, int frame_type);
-gdk_export gdk_return GDKanalytical_stddev_pop(BAT *r, BAT *p, BAT *o, BAT *b,
BAT *s, BAT *e, int tpe, int frame_type);
-gdk_export gdk_return GDKanalytical_variance_samp(BAT *r, BAT *p, BAT *o, BAT
*b, BAT *s, BAT *e, int tpe, int frame_type);
-gdk_export gdk_return GDKanalytical_variance_pop(BAT *r, BAT *p, BAT *o, BAT
*b, BAT *s, BAT *e, int tpe, int frame_type);
-gdk_export gdk_return GDKanalytical_covariance_pop(BAT *r, BAT *p, BAT *o, BAT
*b1, BAT *b2, BAT *s, BAT *e, int tpe, int frame_type);
-gdk_export gdk_return GDKanalytical_covariance_samp(BAT *r, BAT *p, BAT *o,
BAT *b1, BAT *b2, BAT *s, BAT *e, int tpe, int frame_type);
-gdk_export gdk_return GDKanalytical_correlation(BAT *r, BAT *p, BAT *o, BAT
*b1, BAT *b2, BAT *s, BAT *e, int tpe, int frame_type);
+gdk_export BAT *GDKanalytical_stddev_samp(BAT *p, BAT *o, BAT *b, BAT *s, BAT
*e, int tpe, int frame_type)
+ __attribute__((__warn_unused_result__));
+gdk_export BAT *GDKanalytical_stddev_pop(BAT *p, BAT *o, BAT *b, BAT *s, BAT
*e, int tpe, int frame_type)
+ __attribute__((__warn_unused_result__));
+gdk_export BAT *GDKanalytical_variance_samp(BAT *p, BAT *o, BAT *b, BAT *s,
BAT *e, int tpe, int frame_type)
+ __attribute__((__warn_unused_result__));
+gdk_export BAT *GDKanalytical_variance_pop(BAT *p, BAT *o, BAT *b, BAT *s, BAT
*e, int tpe, int frame_type)
+ __attribute__((__warn_unused_result__));
+gdk_export BAT *GDKanalytical_covariance_pop(BAT *p, BAT *o, BAT *b1, BAT *b2,
BAT *s, BAT *e, int tpe, int frame_type)
+ __attribute__((__warn_unused_result__));
+gdk_export BAT *GDKanalytical_covariance_samp(BAT *p, BAT *o, BAT *b1, BAT
*b2, BAT *s, BAT *e, int tpe, int frame_type)
+ __attribute__((__warn_unused_result__));
+gdk_export BAT *GDKanalytical_correlation(BAT *p, BAT *o, BAT *b1, BAT *b2,
BAT *s, BAT *e, int tpe, int frame_type)
+ __attribute__((__warn_unused_result__));
#define SEGMENT_TREE_FANOUT 16 /* Segment tree fanout size. Later we could do
experiments from it */
#define NOTHING /* used for not used optional arguments for aggregate
computation */
@@ -56,7 +78,8 @@ gdk_export gdk_return GDKanalytical_corr
and 'nlevels' is the number of levels on the current segment tree.
In order to run in out-of-memory situations they are allocated inside a
BAT. The 'levels_offset' are allocated after
the segment tree. The beginning pointers for both are returned. */
-gdk_export BAT *GDKinitialize_segment_tree(void);
+gdk_export BAT *GDKinitialize_segment_tree(void)
+ __attribute__((__warn_unused_result__));
gdk_export gdk_return GDKrebuild_segment_tree(oid ncount, oid data_size, BAT
*st, void **segment_tree, oid **levels_offset, oid *nlevels);
/* segment_tree, levels_offset and nlevels must be already defined. ARG1, ARG2
and ARG3 are to be used by the aggregate */
diff --git a/gdk/gdk_analytic_bounds.c b/gdk/gdk_analytic_bounds.c
--- a/gdk/gdk_analytic_bounds.c
+++ b/gdk/gdk_analytic_bounds.c
@@ -91,12 +91,15 @@
} \
} while (0)
-gdk_return
-GDKanalyticaldiff(BAT *r, BAT *b, BAT *p, const bit *restrict npbit, int tpe)
+BAT *
+GDKanalyticaldiff(BAT *b, BAT *p, const bit *restrict npbit, int tpe)
{
BUN i = 0, cnt = BATcount(b);
BATiter pi = bat_iterator(p);
BATiter bi = bat_iterator(b);
+ BAT *r = COLnew(b->hseqbase, TYPE_bit, BATcount(b), TRANSIENT);
+ if (r == NULL)
+ return NULL;
bit *restrict rb = (bit *) Tloc(r, 0), npb = npbit ? *npbit : 0;
const bit *restrict np = (bit *) pi.base;
@@ -171,7 +174,7 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
BATsetcount(r, cnt);
r->tnonil = true;
r->tnil = false;
- return GDK_SUCCEED;
+ return r;
}
#define ANALYTICAL_WINDOW_BOUNDS_ROWS_PRECEDING(TPE, LIMIT, UPCAST) \
@@ -610,9 +613,12 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
} \
} while(0)
-static gdk_return
-GDKanalyticalallbounds(BAT *r, BAT *b, BAT *p, bool preceding)
+static BAT *
+GDKanalyticalallbounds(BAT *b, BAT *p, bool preceding)
{
+ BAT *r = COLnew(b->hseqbase, TYPE_oid, BATcount(b), TRANSIENT);
+ if (r == NULL)
+ return NULL;
oid *restrict rb = (oid *) Tloc(r, 0), i = 0, k = 0, j = 0, cnt =
BATcount(b);
BATiter pi = bat_iterator(p);
const bit *restrict np = pi.base;
@@ -649,7 +655,7 @@ GDKanalyticalallbounds(BAT *r, BAT *b, B
BATsetcount(r, cnt);
r->tnonil = false;
r->tnil = false;
- return GDK_SUCCEED;
+ return r;
}
#define ANALYTICAL_WINDOW_BOUNDS_PEERS_FIXED_PRECEDING(TPE, NAN_CHECK) \
@@ -706,9 +712,12 @@ GDKanalyticalallbounds(BAT *r, BAT *b, B
#define NO_NAN_CHECK /* nulls match on this operator */
-static gdk_return
-GDKanalyticalpeers(BAT *r, BAT *b, BAT *p, bool preceding) /* used in range
when the limit is 0, ie match peer rows */
+static BAT *
+GDKanalyticalpeers(BAT *b, BAT *p, bool preceding) /* used in range when the
limit is 0, ie match peer rows */
{
+ BAT *r = COLnew(b->hseqbase, TYPE_oid, BATcount(b), TRANSIENT);
+ if (r == NULL)
+ return NULL;
oid *restrict rb = (oid *) Tloc(r, 0), i = 0, k = 0, j = 0, l = 0, cnt
= BATcount(b);
BATiter pi = bat_iterator(p);
BATiter bi = bat_iterator(b);
@@ -848,23 +857,27 @@ GDKanalyticalpeers(BAT *r, BAT *b, BAT *
BATsetcount(r, cnt);
r->tnonil = false;
r->tnil = false;
- return GDK_SUCCEED;
+ return r;
}
-static gdk_return
-GDKanalyticalrowbounds(BAT *r, BAT *b, BAT *p, BAT *l, const void *restrict
bound, int tp2, bool preceding, oid second_half)
+static BAT *
+GDKanalyticalrowbounds(BAT *b, BAT *p, BAT *l, const void *restrict bound, int
tp2, bool preceding, oid second_half)
{
oid cnt = BATcount(b), nils = 0, i = 0, k = 0, j = 0;
BATiter pi = bat_iterator(p);
BATiter bi = bat_iterator(b);
BATiter li = bat_iterator(l);
const bit *restrict np = pi.base;
- oid *restrict rb = (oid *) Tloc(r, 0);
bool last = false;
+ BAT *r = NULL;
if (l) { /* dynamic bounds */
if (li.nil)
goto invalid_bound;
+ r = COLnew(b->hseqbase, TYPE_oid, BATcount(b), TRANSIENT);
+ if (r == NULL)
+ return NULL;
+ oid *restrict rb = (oid *) Tloc(r, 0);
switch (tp2) {
case TYPE_bte:{
const bte *restrict limit = (bte *) li.base;
@@ -959,10 +972,16 @@ GDKanalyticalrowbounds(BAT *r, BAT *b, B
bat_iterator_end(&pi);
bat_iterator_end(&bi);
bat_iterator_end(&li);
- return GDKanalyticalallbounds(r, b, p, preceding);
- } else if (is_lng_nil(limit) || limit < 0) { /* this check is
needed if the input is empty */
+ return GDKanalyticalallbounds(b, p, preceding);
+ }
+ if (is_lng_nil(limit) || limit < 0) { /* this check is needed
if the input is empty */
goto invalid_bound;
- } else if (preceding) {
+ }
+ r = COLnew(b->hseqbase, TYPE_oid, BATcount(b), TRANSIENT);
+ if (r == NULL)
+ return NULL;
+ oid *restrict rb = (oid *) Tloc(r, 0);
+ if (preceding) {
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]