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
