Changeset: 2d2fd4a7ddf4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2d2fd4a7ddf4
Modified Files:
        gdk/gdk_bat.c
        monetdb5/modules/kernel/bat5.c
        sql/backends/monet5/sql.c
Branch: Jul2021
Log Message:

Don't use BATsetaccess just to make sure a bat is not a view.


diffs (63 lines):

diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -93,6 +93,7 @@ BATcreatedesc(oid hseq, int tt, bool hea
 
                .batRole = role,
                .batTransient = true,
+               .batRestricted = BAT_WRITE,
        };
        if (heapnames && (bn->theap = GDKmalloc(sizeof(Heap))) == NULL) {
                GDKfree(bn);
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
@@ -188,8 +188,13 @@ BKCappend_cand_force_wrap(bat *r, const 
 
        if ((b = BATdescriptor(*bid)) == NULL)
                throw(MAL, "bat.append", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
-       if ((b = BATsetaccess(b, BAT_WRITE)) == NULL)
-               throw(MAL, "bat.append", OPERATION_FAILED);
+       if (isVIEW(b)) {
+               BAT *bn = COLcopy(b, b->ttype, true, TRANSIENT);
+               restrict_t mode = (restrict_t) b->batRestricted;
+               BBPunfix(b->batCacheid);
+               if (bn == NULL || (b = BATsetaccess(bn, mode)) == NULL)
+                       throw(MAL, "bat.append", GDK_EXCEPTION);
+       }
        if ((u = BATdescriptor(*uid)) == NULL) {
                BBPunfix(b->batCacheid);
                throw(MAL, "bat.append", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
@@ -250,8 +255,13 @@ BKCappend_val_force_wrap(bat *r, const b
 
        if ((b = BATdescriptor(*bid)) == NULL)
                throw(MAL, "bat.append", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
-       if ((b = BATsetaccess(b, BAT_WRITE)) == NULL)
-               throw(MAL, "bat.append", OPERATION_FAILED);
+       if (isVIEW(b)) {
+               BAT *bn = COLcopy(b, b->ttype, true, TRANSIENT);
+               restrict_t mode = (restrict_t) b->batRestricted;
+               BBPunfix(b->batCacheid);
+               if (bn == NULL || (b = BATsetaccess(bn, mode)) == NULL)
+                       throw(MAL, "bat.append", GDK_EXCEPTION);
+       }
        derefStr(b, u);
        if (BUNappend(b, u, force ? *force : false) != GDK_SUCCEED) {
                BBPunfix(b->batCacheid);
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
@@ -2058,7 +2058,12 @@ mvc_delete_wrap(Client cntxt, MalBlkPtr 
 static inline BAT *
 setwritable(BAT *b)
 {
-       return BATsetaccess(b, BAT_WRITE);
+       if (isVIEW(b)) {
+               BAT *bn = COLcopy(b, b->ttype, true, TRANSIENT);
+               BBPunfix(b->batCacheid);
+               b = bn;
+       }
+       return b;
 }
 
 str
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to