Changeset: dc4c8f865ead for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dc4c8f865ead
Modified Files:
        gdk/ChangeLog.Jul2012
        gdk/gdk.h
        gdk/gdk_bat.c
        gdk/gdk_logger.c
        monetdb5/modules/kernel/bat5.mx
        sql/backends/monet5/sql.mx
        sql/storage/bat/bat_utils.c
        sql/storage/bat/bat_utils.h
        sql/storage/restrict/restrict_storage.h
Branch: Jul2012
Log Message:

changed API/ABI of BATclear to BATclear(BAT *b, int forced)
used in sql and logger to keep bat's realy aligned


diffs (156 lines):

diff --git a/gdk/ChangeLog.Jul2012 b/gdk/ChangeLog.Jul2012
--- a/gdk/ChangeLog.Jul2012
+++ b/gdk/ChangeLog.Jul2012
@@ -1,3 +1,8 @@
 # ChangeLog file for MonetDB
 # This file is updated with Maddlog
 
+* Mon Jul  9 2012 Niels Nes <[email protected]>
+- Fixed intermittent problem that joins and selects return incorrect
+  results and possibly inconsistent databases. The problems only occured
+  after a series of queries and updates, therefor it was hard to reproduce.
+
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1494,7 +1494,7 @@ gdk_export int BATgetaccess(BAT *b);
  * @- BAT manipulation
  * @multitable @columnfractions 0.08 0.7
  * @item BAT *
- * @tab BATclear (BAT *b)
+ * @tab BATclear (BAT *b, int force)
  * @item BAT *
  * @tab BATcopy (BAT *b, int ht, int tt, int writeable)
  * @item BAT *
@@ -1525,7 +1525,7 @@ gdk_export int BATgetaccess(BAT *b);
  * a state change in the BAT (as previously): both views on the BAT
  * exist at the same time.
  */
-gdk_export BAT *BATclear(BAT *b);
+gdk_export BAT *BATclear(BAT *b, int force);
 gdk_export BAT *BATcopy(BAT *b, int ht, int tt, int writeable);
 gdk_export BAT *BATmark(BAT *b, oid base);
 gdk_export BAT *BATmark_grp(BAT *b, BAT *g, oid *base);
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -496,7 +496,7 @@ BATextend(BAT *b, BUN newcap)
  * the heaps by copying a standard small empty image over them.
  */
 BAT *
-BATclear(BAT *b)
+BATclear(BAT *b, int force)
 {
        BUN p, q;
        int voidbat;
@@ -515,7 +515,7 @@ BATclear(BAT *b)
        }
 
        /* small BAT: delete all elements by hand */
-       if (!voidbat && b->batCount < 20) {
+       if (!force && !voidbat && b->batCount < 20) {
                BATloopDEL(b, p, q) {
                        p = BUNdelete(b, p, FALSE);
                }
@@ -589,7 +589,10 @@ BATclear(BAT *b)
                }
        }
 
-       b->batFirst = b->batInserted;
+       if (force)
+                b->batFirst = b->batDeleted = b->batInserted = 0;
+       else
+               b->batFirst = b->batInserted;
        BATsetcount(b,0);
        b->batDirty = TRUE;
        BATsettrivprop(b);
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -234,7 +234,7 @@ la_bat_clear(logger *lg, logaction *la)
        if (b) {
                int access = b->P->restricted;
                b->P->restricted = BAT_WRITE;
-               BATclear(b);
+               BATclear(b, TRUE);
                b->P->restricted = access;
                logbat_destroy(b);
        }
@@ -884,7 +884,7 @@ logger_commit(logger *lg)
 
        /* cleanup old snapshots */
        if (BATcount(lg->snapshots)) {
-               BATclear(lg->snapshots);
+               BATclear(lg->snapshots, FALSE);
                BATcommit(lg->snapshots);
        }
        return bm_commit(lg);
@@ -1828,7 +1828,7 @@ assert(lb->P->restricted > BAT_WRITE);
        }
        res = bm_subcommit(lg->catalog, lg->catalog, n, lg->debug);
        BBPreclaim(n);
-       BATclear(lg->freed);
+       BATclear(lg->freed, FALSE);
        BATcommit(lg->freed);
        return res != 0 ? LOG_ERR : LOG_OK;
 }
diff --git a/monetdb5/modules/kernel/bat5.mx b/monetdb5/modules/kernel/bat5.mx
--- a/monetdb5/modules/kernel/bat5.mx
+++ b/monetdb5/modules/kernel/bat5.mx
@@ -1689,7 +1689,7 @@ BKCdelete_all(int *r, int *bid)
        if ((b = BATdescriptor(*bid)) == NULL) {
                throw(MAL, "bat.delete", RUNTIME_OBJECT_MISSING);
        }
-       bn=BATclear(b);
+       bn=BATclear(b, FALSE);
        if (bn == NULL){
                BBPreleaseref(b->batCacheid);
                throw(MAL, "bat.delete_all", OPERATION_FAILED);
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -6494,7 +6494,7 @@ SQL@1(Client cntxt, MalBlkPtr mb, MalStk
                d->ibid = bids[i]; /* use the insert bat */
                c->base.wtime = c->base.rtime = tr->stime;
        }
-       BATclear(del);
+       BATclear(del, TRUE);
        BBPreleaseref(del->batCacheid);
        /* bat was cleared */
        t->cleared = 1;
diff --git a/sql/storage/bat/bat_utils.c b/sql/storage/bat/bat_utils.c
--- a/sql/storage/bat/bat_utils.c
+++ b/sql/storage/bat/bat_utils.c
@@ -132,7 +132,7 @@ update_table_bat(BAT *b, BAT *ub)
 {
        if (ub && BATcount(ub)) {
                void_replace_bat(b, ub, TRUE);
-               BATclear(ub);
+               BATclear(ub, TRUE);
                BATcommit(ub);
        }
 }
diff --git a/sql/storage/bat/bat_utils.h b/sql/storage/bat/bat_utils.h
--- a/sql/storage/bat/bat_utils.h
+++ b/sql/storage/bat/bat_utils.h
@@ -24,7 +24,7 @@
 #include <gdk_logger.h>
 
 #define bat_set_access(b,access) b->P->restricted = access
-#define bat_clear(b) 
bat_set_access(b,BAT_WRITE);BATclear(b);bat_set_access(b,BAT_READ)
+#define bat_clear(b) 
bat_set_access(b,BAT_WRITE);BATclear(b,TRUE);bat_set_access(b,BAT_READ)
 
 extern BAT *temp_descriptor(log_bid b);
 extern BAT *quick_descriptor(log_bid b);
diff --git a/sql/storage/restrict/restrict_storage.h 
b/sql/storage/restrict/restrict_storage.h
--- a/sql/storage/restrict/restrict_storage.h
+++ b/sql/storage/restrict/restrict_storage.h
@@ -32,7 +32,7 @@ typedef struct sql_bat {
 } sql_bat;
 
 #define bat_set_access(b,access) b->P->restricted = access
-#define bat_clear(b) 
bat_set_access(b,BAT_WRITE);BATclear(b);bat_set_access(b,BAT_READ)
+#define bat_clear(b) 
bat_set_access(b,BAT_WRITE);BATclear(b,TRUE);bat_set_access(b,BAT_READ)
 
 /* initialize bat storage call back functions interface */
 extern int su_storage_init( store_functions *sf );
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to