Changeset: 807f421f99b9 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=807f421f99b9 Modified Files: gdk/ChangeLog.Jul2017 gdk/gdk_batop.c gdk/gdk_logger.c Branch: Jul2017 Log Message:
Fixed bug in BATappend of string BAT with candidate list. diffs (104 lines): diff --git a/gdk/ChangeLog.Jul2017 b/gdk/ChangeLog.Jul2017 --- a/gdk/ChangeLog.Jul2017 +++ b/gdk/ChangeLog.Jul2017 @@ -1,3 +1,7 @@ # ChangeLog file for MonetDB # This file is updated with Maddlog +* Mon Oct 23 2017 Sjoerd Mullender <sjo...@acm.org> +- A serious bug, possibly resulting in database corruption, having to + do with appending data to a string BAT was fixed. + diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -226,7 +226,7 @@ insert_string_bat(BAT *b, BAT *n, BAT *s } } else if (unshare_string_heap(b) != GDK_SUCCEED) return GDK_FAIL; - if (toff == 0 && n->twidth == b->twidth) { + if (toff == 0 && n->twidth == b->twidth && cand == NULL) { /* we don't need to do any translation of offset * values, so we can use fast memcpy */ memcpy(Tloc(b, BUNlast(b)), Tloc(n, start), @@ -531,24 +531,27 @@ BATappend(BAT *b, BAT *n, BAT *s, bit fo r = BUNlast(b); - if (BATcount(b) == 0 && cand == NULL) { + if (BATcount(b) == 0) { BATiter ni = bat_iterator(n); b->tsorted = n->tsorted; - b->tnosorted = start <= n->tnosorted && n->tnosorted < end ? n->tnosorted - start : 0; b->trevsorted = n->trevsorted; - b->tnorevsorted = start <= n->tnorevsorted && n->tnorevsorted < end ? n->tnorevsorted - start : 0; b->tdense = n->tdense && cand == NULL; - b->tnodense = start <= n->tnodense && n->tnodense < end ? n->tnodense - start : 0; b->tnonil = n->tnonil; b->tnil = n->tnil && cnt == BATcount(n); b->tseqbase = oid_nil; if (cand == NULL) { + b->tnosorted = start <= n->tnosorted && n->tnosorted < end ? n->tnosorted - start : 0; + b->tnorevsorted = start <= n->tnorevsorted && n->tnorevsorted < end ? n->tnorevsorted - start : 0; + b->tnodense = start <= n->tnodense && n->tnodense < end ? n->tnodense - start : 0; if (n->tdense && n->ttype == TYPE_oid) b->tseqbase = *(oid *) BUNtail(ni, start); else if (n->ttype == TYPE_void && n->tseqbase != oid_nil) b->tseqbase = n->tseqbase + start; + } else { + b->tnosorted = 0; + b->tnorevsorted = 0; } /* if tunique, uniqueness is guaranteed above */ b->tkey = n->tkey | b->tunique; diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -1319,7 +1319,7 @@ bm_subcommit(logger *lg, BAT *list_bid, catalog_bid == list_bid && catalog_nme == list_nme && lg->catalog_bid == catalog_bid) { - BAT *bids, *nmes, *tids, *b; + BAT *bids, *nmes, *tids; tids = bm_tids(catalog_bid, dcatalog); if (tids == NULL) { @@ -1337,28 +1337,6 @@ bm_subcommit(logger *lg, BAT *list_bid, return GDK_FAIL; } - b = BATproject(tids, catalog_bid); - if (BATappend(bids, b, NULL, TRUE) != GDK_SUCCEED) { - logbat_destroy(b); - logbat_destroy(tids); - logbat_destroy(bids); - logbat_destroy(nmes); - GDKfree(n); - return GDK_FAIL; - } - logbat_destroy(b); - b = BATproject(tids, catalog_nme); - if (BATappend(nmes, b, NULL, TRUE) != GDK_SUCCEED) { - logbat_destroy(b); - logbat_destroy(tids); - logbat_destroy(bids); - logbat_destroy(nmes); - GDKfree(n); - return GDK_FAIL; - } - logbat_destroy(b); - - /* if (BATappend(bids, catalog_bid, tids, TRUE) != GDK_SUCCEED || BATappend(nmes, catalog_nme, tids, TRUE) != GDK_SUCCEED) { logbat_destroy(tids); @@ -1367,7 +1345,6 @@ bm_subcommit(logger *lg, BAT *list_bid, GDKfree(n); return GDK_FAIL; } - */ logbat_destroy(tids); BATclear(dcatalog, TRUE); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list