Changeset: e966312345f7 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e966312345f7
Modified Files:
sql/storage/bat/bat_logger.c
Branch: Apr2011
Log Message:
Fix upgrade to Apr2011 SQL catalog.
logger_del_bat causes a bat to be destroyed, which is no good for what
should be a rename. Instead make a copy and add that.
diffs (106 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
@@ -110,7 +110,7 @@
/* mark that the rest is fixed on sql level */
}
if (catalog_version == CATALOG_OCT2010) {
- BAT *b;
+ BAT *b, *b1;
char *s = "sys", n[64];
fprintf(stdout, "# upgrading catalog from Oct2010\n");
@@ -118,39 +118,64 @@
/* rename table 'keycolumns' into 'objects'
* and remove trunc column */
- while(s) {
- b = temp_descriptor(logger_find_bat(lg, N(n, "D", s,
"keycolumns")));
- if (!b) return ;
- logger_del_bat(lg, b->batCacheid);
- logger_add_bat(lg, b, N(n, "D", s, "objects"));
- bat_destroy(b);
+ while (s) {
+ b = temp_descriptor(logger_find_bat(lg, N(n, "D", s,
"keycolumns")));
+ if (!b)
+ return;
+ b1 = BATcopy(b, b->htype, b->ttype, 1);
+ if (!b1)
+ return;
+ b1 = BATsetaccess(b1, BAT_READ);
+ logger_del_bat(lg, b->batCacheid);
+ logger_add_bat(lg, b1, N(n, "D", s, "objects"));
+ bat_destroy(b);
+ bat_destroy(b1);
- b = temp_descriptor(logger_find_bat(lg, N(n, NULL, s,
"keycolumns_id")));
- if (!b) return ;
- logger_del_bat(lg, b->batCacheid);
- logger_add_bat(lg, b, N(n, NULL, s, "objects_id"));
- bat_destroy(b);
+ b = temp_descriptor(logger_find_bat(lg, N(n, NULL, s,
"keycolumns_id")));
+ if (!b)
+ return;
+ b1 = BATcopy(b, b->htype, b->ttype, 1);
+ if (!b1)
+ return;
+ b1 = BATsetaccess(b1, BAT_READ);
+ logger_del_bat(lg, b->batCacheid);
+ logger_add_bat(lg, b1, N(n, NULL, s, "objects_id"));
+ bat_destroy(b);
+ bat_destroy(b1);
- b = temp_descriptor(logger_find_bat(lg, N(n, NULL, s,
"keycolumns_column")));
- if (!b) return ;
- logger_del_bat(lg, b->batCacheid);
- logger_add_bat(lg, b, N(n, NULL, s, "objects_name"));
- bat_destroy(b);
+ b = temp_descriptor(logger_find_bat(lg, N(n, NULL, s,
"keycolumns_column")));
+ if (!b)
+ return;
+ b1 = BATcopy(b, b->htype, b->ttype, 1);
+ if (!b1)
+ return;
+ b1 = BATsetaccess(b1, BAT_READ);
+ logger_del_bat(lg, b->batCacheid);
+ logger_add_bat(lg, b1, N(n, NULL, s, "objects_name"));
+ bat_destroy(b);
+ bat_destroy(b1);
- b = temp_descriptor(logger_find_bat(lg, N(n, NULL, s,
"keycolumns_nr")));
- if (!b) return ;
- logger_del_bat(lg, b->batCacheid);
- logger_add_bat(lg, b, N(n, NULL, s, "objects_nr"));
- bat_destroy(b);
+ b = temp_descriptor(logger_find_bat(lg, N(n, NULL, s,
"keycolumns_nr")));
+ if (!b)
+ return;
+ b1 = BATcopy(b, b->htype, b->ttype, 1);
+ if (!b1)
+ return;
+ b1 = BATsetaccess(b1, BAT_READ);
+ logger_del_bat(lg, b->batCacheid);
+ logger_add_bat(lg, b1, N(n, NULL, s, "objects_nr"));
+ bat_destroy(b);
+ bat_destroy(b1);
- b = temp_descriptor(logger_find_bat(lg, N(n, NULL, s,
"keycolumns_trunc")));
- if (!b) return ;
- logger_del_bat(lg, b->batCacheid);
- bat_destroy(b);
- if (strcmp(s,"sys") == 0)
- s = "tmp";
- else
- s = NULL;
+ b = temp_descriptor(logger_find_bat(lg, N(n, NULL, s,
"keycolumns_trunc")));
+ if (!b)
+ return;
+ logger_del_bat(lg, b->batCacheid);
+ bat_destroy(b);
+ if (strcmp(s, "sys") == 0)
+ s = "tmp";
+ else
+ s = NULL;
}
}
}
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list