Changeset: ebaa59bd1637 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ebaa59bd1637
Modified Files:
sql/storage/bat/bat_logger.c
Branch: default
Log Message:
Now also convert the deleted rows bat to new format (msk bat).
diffs (209 lines):
diff --git a/sql/storage/bat/bat_logger.c b/sql/storage/bat/bat_logger.c
--- a/sql/storage/bat/bat_logger.c
+++ b/sql/storage/bat/bat_logger.c
@@ -1380,17 +1380,19 @@ upgrade(old_logger *lg)
if (delidx >= 0) {
BAT *d = temp_descriptor(old_logger_find_bat(lg,
delname, 0, 0));
BAT *m = BATconstant(0, TYPE_msk, &(msk){0},
BATcount(b), PERSISTENT);
- if (d == NULL || m == NULL) {
+ if (m == NULL) {
bat_destroy(d);
bat_destroy(m);
goto bailout;
}
- const oid *dels = (const oid *) Tloc(d, 0);
- for (BUN q = BUNlast(d), p = 0; p < q; p++)
- mskSetVal(m, (BUN) dels[p], true);
+ if (d != NULL) {
+ const oid *dels = (const oid *) Tloc(d, 0);
+ for (BUN q = BUNlast(d), p = 0; p < q; p++)
+ mskSetVal(m, (BUN) dels[p], true);
+ }
if (BUNappend(lg->lg->catalog_bid, &m->batCacheid,
false) != GDK_SUCCEED ||
BUNappend(lg->lg->catalog_id,
&tables[delidx].newid, false) != GDK_SUCCEED ||
- BUNappend(lg->del, &d->batCacheid, false) !=
GDK_SUCCEED) {
+ (d != NULL && BUNappend(lg->del,
&d->batCacheid, false) != GDK_SUCCEED)) {
bat_destroy(d);
bat_destroy(m);
goto bailout;
@@ -1505,6 +1507,83 @@ upgrade(old_logger *lg)
bat_destroy(cands);
bat_destroy(b);
+ BAT *tabs;
+ tabs = BATselect(lg->lg->catalog_id, NULL, &(int){2165}, &int_nil,
true, true, false);
+ if (tabs == NULL)
+ goto bailout;
+ BAT *b1;
+ b1 = BATintersect(lg->lg->catalog_id, bats[1].idbat, tabs,
bats[1].cands, false, false, BUN_NONE);
+ bat_destroy(tabs);
+ if (b1 == NULL)
+ goto bailout;
+ BAT *b3, *b4;
+ if (BATsemijoin(&b3, &b4, lg->lg->catalog_id, bats[2].parbat, b1,
bats[2].cands, false, false, BUN_NONE) != GDK_SUCCEED) {
+ bat_destroy(b1);
+ goto bailout;
+ }
+ bat_destroy(b3);
+ b3 = BATproject(b4, bats[2].idbat);
+ bat_destroy(b4);
+ if (b3 == NULL) {
+ bat_destroy(b1);
+ goto bailout;
+ }
+ b4 = BATintersect(lg->lg->catalog_id, b3, NULL, NULL, false, false,
BUN_NONE);
+ bat_destroy(b3);
+ if (b4 == NULL) {
+ bat_destroy(b1);
+ goto bailout;
+ }
+ struct canditer ci;
+ canditer_init(&ci, lg->lg->catalog_bid, b1);
+ const int *bids;
+ const oid *cbids;
+ bids = Tloc(lg->lg->catalog_bid, 0);
+ cbids = Tloc(b4, 0);
+ for (BUN i = 0; i < ci.ncand; i++) {
+ bat cbid = bids[cbids[i]];
+ b = temp_descriptor(cbid);
+ if (b == NULL) {
+ bat_destroy(b1);
+ bat_destroy(b3);
+ goto bailout;
+ }
+ BUN len;
+ len = BATcount(b);
+ bat_destroy(b);
+ oid o;
+ o = canditer_next(&ci);
+ bat tbid;
+ tbid = bids[o - lg->lg->catalog_bid->hseqbase];
+ b = temp_descriptor(tbid);
+ BAT *bn;
+ bn = BATconstant(0, TYPE_msk, &(msk){0}, len, PERSISTENT);
+ if (b == NULL || bn == NULL) {
+ bat_destroy(b);
+ bat_destroy(bn);
+ bat_destroy(b1);
+ bat_destroy(b3);
+ goto bailout;
+ }
+ const oid *dels;
+ dels = Tloc(b, 0);
+ for (BUN q = BUNlast(b), p = 0; p < q; p++) {
+ mskSetVal(bn, (BUN) dels[p], true);
+ }
+ bat_destroy(b);
+ if (BUNappend(lg->del, &tbid, false) != GDK_SUCCEED ||
+ BUNreplace(lg->lg->catalog_bid, o, &bn->batCacheid, false)
!= GDK_SUCCEED) {
+ bat_destroy(bn);
+ bat_destroy(b1);
+ bat_destroy(b3);
+ goto bailout;
+ }
+ BBPretain(bn->batCacheid);
+ bat_destroy(bn);
+ }
+ bat_destroy(b1);
+ bat_destroy(b4);
+
rc = GDK_SUCCEED;
bailout:
@@ -1724,22 +1803,90 @@ bl_postversion(void *Store, old_logger *
/* alter table sys.objects add column sub integer; */
BAT *objs_id = temp_descriptor(logger_find_bat(lg, 2111));
- if (objs_id == NULL)
+ BAT *objs_nr = temp_descriptor(logger_find_bat(lg, 2113));
+ BAT *objs_sub = BATconstant(objs_id->hseqbase, TYPE_int,
&int_nil, BATcount(objs_id), PERSISTENT);
+ BAT *b = temp_descriptor(logger_find_bat(lg, 2110));
+ if (objs_id == NULL || objs_nr == NULL || objs_sub == NULL || b
== NULL || BUNappend(old_lg->del, &objs_nr->batCacheid, false) != GDK_SUCCEED) {
+ bat_destroy(objs_id);
+ bat_destroy(objs_nr);
+ bat_destroy(b);
+ bat_destroy(objs_sub);
+ return GDK_FAIL;
+ }
+ BAT *cands = BATmaskedcands(0, BATcount(b), b, false);
+ bat_destroy(b);
+ if (cands == NULL) {
+ bat_destroy(objs_id);
+ bat_destroy(objs_nr);
+ bat_destroy(objs_sub);
return GDK_FAIL;
-
- BAT *objs_sub = BATconstant(objs_id->hseqbase, TYPE_int,
&int_nil, BATcount(objs_id), PERSISTENT);
- bat_destroy(objs_id);
- if (objs_sub == NULL) {
+ }
+ b = BATselect(objs_nr, cands, &(int) {2000}, &int_nil, false,
false, false);
+ bat_destroy(cands);
+ if (b == NULL) {
+ bat_destroy(objs_id);
+ bat_destroy(objs_nr);
+ bat_destroy(objs_sub);
+ return GDK_FAIL;
+ }
+ cands = b;
+ b = BATproject2(cands, objs_nr, NULL);
+ if (b == NULL) {
+ bat_destroy(objs_id);
+ bat_destroy(objs_nr);
+ bat_destroy(objs_sub);
+ bat_destroy(cands);
return GDK_FAIL;
}
- if (BATsetaccess(objs_sub, BAT_READ) != GDK_SUCCEED ||
+ gdk_return rc = BATreplace(objs_sub, cands, b, false);
+ bat_destroy(b);
+ if (rc != GDK_SUCCEED) {
+ bat_destroy(objs_id);
+ bat_destroy(objs_nr);
+ bat_destroy(objs_sub);
+ bat_destroy(cands);
+ return GDK_FAIL;
+ }
+ b = COLcopy(objs_nr, objs_nr->ttype, true, PERSISTENT);
+ bat_destroy(objs_nr);
+ if (b == NULL) {
+ bat_destroy(objs_id);
+ bat_destroy(objs_sub);
+ bat_destroy(cands);
+ return GDK_FAIL;
+ }
+ objs_nr = b;
+ b = BATproject2(cands, objs_id, NULL);
+ bat_destroy(objs_id);
+ if (b == NULL) {
+ bat_destroy(objs_nr);
+ bat_destroy(objs_sub);
+ bat_destroy(cands);
+ return GDK_FAIL;
+ }
+ rc = BATreplace(objs_nr, cands, b, false);
+ bat_destroy(b);
+ bat_destroy(cands);
+ if (rc != GDK_SUCCEED) {
+ bat_destroy(objs_nr);
+ bat_destroy(objs_sub);
+ return GDK_FAIL;
+ }
+
+ /* now do something with objs_nr and objs_sub */
+
+ if (BUNreplace(lg->catalog_bid, BUNfnd(lg->catalog_id,
&(int){2113}), &objs_nr->batCacheid, false) != GDK_SUCCEED ||
+ BATsetaccess(objs_sub, BAT_READ) != GDK_SUCCEED ||
+ BATsetaccess(objs_nr, BAT_READ) != GDK_SUCCEED ||
BUNappend(lg->catalog_id, &(int) {2163}, false) !=
GDK_SUCCEED ||
BUNappend(lg->catalog_bid, &objs_sub->batCacheid,
false) != GDK_SUCCEED) {
bat_destroy(objs_sub);
return GDK_FAIL;
}
BBPretain(objs_sub->batCacheid);
+ BBPretain(objs_nr->batCacheid);
bat_destroy(objs_sub);
+ bat_destroy(objs_nr);
/* update sys.objects o set sub = (select t.id from
sys.dependencies d, sys._tables t where o.nr = d.depend_id and d.id = t.id and
o.name = t.name); */
/* alter table tmp.objects add column sub integer; */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list