Changeset: 1e62af20b1c3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1e62af20b1c3
Modified Files:
clients/Tests/exports.stable.out
gdk/gdk.h
gdk/gdk_bat.c
gdk/gdk_batop.c
gdk/gdk_logger.c
monetdb5/modules/kernel/bat5.c
Branch: default
Log Message:
Introduced new enum type restrict_t for BAT access modes.
diffs (200 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
@@ -117,7 +117,7 @@ BAT *BATdiff(BAT *l, BAT *r, BAT *sl, BA
gdk_return BATextend(BAT *b, BUN newcap)
__attribute__((__warn_unused_result__));
void BATfakeCommit(BAT *b);
gdk_return BATfirstn(BAT **topn, BAT **gids, BAT *b, BAT *cands, BAT *grps,
BUN n, bool asc, bool nilslast, bool distinct)
__attribute__((__warn_unused_result__));
-int BATgetaccess(BAT *b);
+restrict_t BATgetaccess(BAT *b);
PROPrec *BATgetprop(BAT *b, enum prop_t idx);
gdk_return BATgroup(BAT **groups, BAT **extents, BAT **histo, BAT *b, BAT *s,
BAT *g, BAT *e, BAT *h) __attribute__((__warn_unused_result__));
const char *BATgroupaggrinit(BAT *b, BAT *g, BAT *e, BAT *s, oid *minp, oid
*maxp, BUN *ngrpp, BUN *startp, BUN *endp, const oid **candp, const oid
**candendp);
@@ -167,7 +167,7 @@ BAT *BATsample(BAT *b, BUN n);
BAT *BATsample_with_seed(BAT *b, BUN n, unsigned seed);
BAT *BATselect(BAT *b, BAT *s, const void *tl, const void *th, bool li, bool
hi, bool anti);
gdk_return BATsemijoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr,
bool nil_matches, BUN estimate) __attribute__((__warn_unused_result__));
-gdk_return BATsetaccess(BAT *b, int mode);
+gdk_return BATsetaccess(BAT *b, restrict_t mode);
void BATsetcapacity(BAT *b, BUN cnt);
void BATsetcount(BAT *b, BUN cnt);
void BATsetprop(BAT *b, enum prop_t idx, int type, const void *v);
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1249,10 +1249,10 @@ bat_iterator(BAT *b)
* @item BAT *
* @tab BATmode (BAT *b, int mode)
* @item BAT *
- * @tab BATsetaccess (BAT *b, int mode)
+ * @tab BATsetaccess (BAT *b, restrict_t mode)
* @item int
* @tab BATdirty (BAT *b)
- * @item int
+ * @item restrict_t
* @tab BATgetaccess (BAT *b)
* @end multitable
*
@@ -1292,8 +1292,21 @@ gdk_export gdk_return BATmode(BAT *b, in
gdk_export gdk_return BATroles(BAT *b, const char *tnme);
gdk_export void BAThseqbase(BAT *b, oid o);
gdk_export void BATtseqbase(BAT *b, oid o);
-gdk_export gdk_return BATsetaccess(BAT *b, int mode);
-gdk_export int BATgetaccess(BAT *b);
+
+/* The batRestricted field indicates whether a BAT is readonly.
+ * we have modes: BAT_WRITE = all permitted
+ * BAT_APPEND = append-only
+ * BAT_READ = read-only
+ * VIEW bats are always mapped read-only.
+ */
+typedef enum {
+ BAT_WRITE, /* all kinds of access allowed */
+ BAT_READ, /* only read-access allowed */
+ BAT_APPEND, /* only reads and appends allowed */
+} restrict_t;
+
+gdk_export gdk_return BATsetaccess(BAT *b, restrict_t mode);
+gdk_export restrict_t BATgetaccess(BAT *b);
#define BATdirty(b) (!(b)->batCopiedtodisk || \
@@ -1305,10 +1318,6 @@ gdk_export int BATgetaccess(BAT *b);
#define TRANSIENT 1
#define LOG_DIR 2
-#define BAT_WRITE 0 /* all kinds of access allowed */
-#define BAT_READ 1 /* only read-access allowed */
-#define BAT_APPEND 2 /* only reads and appends allowed */
-
#define BATcapacity(b) (b)->batCapacity
/*
* @- BAT manipulation
@@ -2533,16 +2542,6 @@ gdk_export void VIEWbounds(BAT *b, BAT *
} \
} while (false)
-/* The batRestricted field indicates whether a BAT is readonly.
- * we have modes: BAT_WRITE = all permitted
- * BAT_APPEND = append-only
- * BAT_READ = read-only
- * VIEW bats are always mapped read-only.
- */
-
-#define BAThrestricted(b) ((b)->batRestricted)
-#define BATtrestricted(b) (VIEWtparent(b) ?
BBP_cache(VIEWtparent(b))->batRestricted : (b)->batRestricted)
-
/* the parentid in a VIEW is correct for the normal view. We must
* correct for the reversed view.
*/
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -680,8 +680,9 @@ COLcopy(BAT *b, int tt, bool writable, i
/* first try case (1); create a view, possibly with different
* atom-types */
if (role == b->batRole &&
- BAThrestricted(b) == BAT_READ &&
- BATtrestricted(b) == BAT_READ &&
+ b->batRestricted == BAT_READ &&
+ (!VIEWtparent(b) ||
+ BBP_cache(VIEWtparent(b))->batRestricted == BAT_READ) &&
!writable) {
bn = VIEWcreate(b->hseqbase, b);
if (bn == NULL)
@@ -1934,9 +1935,11 @@ BATcheckmodes(BAT *b, bool existing)
}
gdk_return
-BATsetaccess(BAT *b, int newmode)
+BATsetaccess(BAT *b, restrict_t newmode)
{
- int bakmode, bakdirty;
+ restrict_t bakmode;
+ bool bakdirty;
+
BATcheck(b, "BATsetaccess", GDK_FAIL);
if (isVIEW(b) && newmode != BAT_READ) {
if (VIEWreset(b) != GDK_SUCCEED)
@@ -1988,11 +1991,12 @@ BATsetaccess(BAT *b, int newmode)
return GDK_SUCCEED;
}
-int
+restrict_t
BATgetaccess(BAT *b)
{
BATcheck(b, "BATgetaccess", 0);
- return b->batRestricted;
+ assert(b->batRestricted != 3); /* only valid restrict_t values */
+ return (restrict_t) b->batRestricted;
}
/*
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -969,7 +969,9 @@ BATslice(BAT *b, BUN l, BUN h)
/* If the source BAT is readonly, then we can obtain a VIEW
* that just reuses the memory of the source. */
- if (BAThrestricted(b) == BAT_READ && BATtrestricted(b) == BAT_READ) {
+ if (b->batRestricted == BAT_READ &&
+ (!VIEWtparent(b) ||
+ BBP_cache(VIEWtparent(b))->batRestricted == BAT_READ)) {
bn = VIEWcreate(b->hseqbase + low, b);
if (bn == NULL)
return NULL;
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -296,7 +296,7 @@ la_bat_clear(logger *lg, logaction *la)
b = BATdescriptor(bid);
if (b) {
- int access = b->batRestricted;
+ restrict_t access = b->batRestricted;
b->batRestricted = BAT_WRITE;
BATclear(b, true);
b->batRestricted = access;
@@ -2986,7 +2986,7 @@ logger_add_bat(logger *lg, BAT *b, const
log_bid bid = logger_find_bat(lg, name, tpe, id);
lng lid = (lng) id;
- assert(b->batRestricted > 0 ||
+ assert(b->batRestricted != BAT_WRITE ||
b == lg->snapshots_bid ||
b == lg->snapshots_tid ||
b == lg->dsnapshots ||
diff --git a/monetdb5/modules/kernel/bat5.c b/monetdb5/modules/kernel/bat5.c
--- a/monetdb5/modules/kernel/bat5.c
+++ b/monetdb5/modules/kernel/bat5.c
@@ -34,7 +34,7 @@
/* set access mode to bat, replacing input with output */
static BAT *
-setaccess(BAT *b, int mode)
+setaccess(BAT *b, restrict_t mode)
{
BAT *bn = b;
@@ -613,7 +613,7 @@ str
BKCsetAccess(bat *res, const bat *bid, const char * const *param)
{
BAT *b;
- int m;
+ restrict_t m;
if ((b = BATdescriptor(*bid)) == NULL)
throw(MAL, "bat.setAccess", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
@@ -655,10 +655,6 @@ BKCgetAccess(str *res, const bat *bid)
case BAT_WRITE:
*res = GDKstrdup("write");
break;
- default:
- /* cannot happen, just here to help analysis tools */
- *res = GDKstrdup(str_nil);
- break;
}
BBPunfix(b->batCacheid);
if(*res == NULL)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list