Changeset: a5c80687d26f for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a5c80687d26f Added Files: sql/test/BugTracker-2014/Tests/oid-table-assert.Bug-3514.sql sql/test/BugTracker-2014/Tests/oid-table-assert.Bug-3514.stable.err sql/test/BugTracker-2014/Tests/oid-table-assert.Bug-3514.stable.out sql/test/BugTracker-2014/Tests/round-properties.Bug-3515.sql sql/test/BugTracker-2014/Tests/round-properties.Bug-3515.stable.err sql/test/BugTracker-2014/Tests/round-properties.Bug-3515.stable.out Modified Files: clients/R/MonetDB.R/DESCRIPTION clients/Tests/exports.stable.out gdk/gdk_bat.c gdk/gdk_batop.c gdk/gdk_logger.c gdk/gdk_select.c sql/backends/monet5/sql.c sql/backends/monet5/sql_round_impl.h sql/test/BugTracker-2014/Tests/All sql/test/pg_regress/Tests/numeric.sql sql/test/pg_regress/Tests/numeric.stable.err sql/test/pg_regress/Tests/numeric.stable.out sql/test/pg_regress/postgresql2sql99.sh Branch: transaction-replication Log Message:
Merge with default branch Manually resolve conflicts in gdk_logger diffs (truncated from 3862 to 300 lines): diff --git a/clients/R/MonetDB.R/DESCRIPTION b/clients/R/MonetDB.R/DESCRIPTION --- a/clients/R/MonetDB.R/DESCRIPTION +++ b/clients/R/MonetDB.R/DESCRIPTION @@ -1,6 +1,6 @@ Package: MonetDB.R Version: 0.9.4 -Date: 2013-07-16 +Date: 2013-07-18 Title: Connect MonetDB to R Authors@R: c(person("Hannes Muehleisen", role = c("aut", "cre"),email = "han...@cwi.nl"), person("Thomas Lumley", role = "ctb"), diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -160,7 +160,7 @@ int BATmmap(BAT *b, int hb, int tb, int BAT *BATmode(BAT *b, int onoff); gdk_return BATmultiprintf(stream *f, int argc, BAT *argv[], int printoid, int order, int printorderby); int BATname(BAT *b, const char *nme); -BAT *BATnew(int hdtype, int tltype, BUN capacity, int role); +BAT *BATnew(int hdtype, int tltype, BUN capacity, int role) __attribute__((warn_unused_result)); BAT *BATorder(BAT *b); BAT *BATorder_rev(BAT *b); int BATordered(BAT *b); diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c --- a/gdk/gdk_bat.c +++ b/gdk/gdk_bat.c @@ -1288,6 +1288,7 @@ BUNappend(BAT *b, const void *t, bit for return NULL; } + assert(!isVIEW(b)); bm = BBP_cache(-b->batCacheid); if ((b->tkey & BOUND2BTRUE) && BUNfnd(bm, t) != BUN_NONE) { return b; diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -457,6 +457,7 @@ BATappend(BAT *b, BAT *n, bit force) if (b == NULL || n == NULL || (sz = BATcount(n)) == 0) { return b; } + assert(!isVIEW(b)); if (b->htype != TYPE_void && b->htype != TYPE_oid) { GDKerror("BATappend: input must be (V)OID headed\n"); return NULL; diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -183,7 +183,7 @@ log_read_string(logger *l) } if (len == 0) return NULL; - buf = (char *) GDKmalloc(len); + buf = GDKmalloc(len); if (buf == NULL) { fprintf(stderr, "!ERROR: log_read_string: malloc failed\n"); return NULL; @@ -649,14 +649,14 @@ la_bat_use(logger *lg, logaction *la) static trans * tr_create(trans *tr, int tid) { - trans *ntr = (trans *) GDKmalloc(sizeof(trans)); + trans *ntr = GDKmalloc(sizeof(trans)); if (ntr == NULL) return NULL; ntr->tid = tid; ntr->sz = TR_SIZE; ntr->nr = 0; - ntr->changes = (logaction *) GDKmalloc(sizeof(logaction) * TR_SIZE); + ntr->changes = GDKmalloc(sizeof(logaction) * TR_SIZE); if (ntr->changes == NULL) { GDKfree(ntr); return NULL; @@ -1092,7 +1092,7 @@ bm_subcommit(BAT *list_bid, BAT *list_nm { BUN p, q; BUN nn = 3 + (list_bid->batFirst > list_bid->batDeleted ? list_bid->batFirst - list_bid->batDeleted : 0) + BATcount(list_bid) + (extra ? BATcount(extra) : 0); - bat *n = (bat*)GDKmalloc(sizeof(bat) * nn); + bat *n = GDKmalloc(sizeof(bat) * nn); int i = 0; BATiter iter = (list_nme)?bat_iterator(list_nme):bat_iterator(list_bid); int res; @@ -1157,7 +1157,8 @@ logger_fatal(const char *format, const c GDKexit(1); } -/* upgrade from old logger format */ +/* upgrade from old logger format; all errors are fatal since + * this should only happen on startup */ static void logger_upgrade_format(char *fn, logger *lg, bat *bid, char *bak) { /* split catalog -> catalog_bid, catalog_nme */ @@ -1169,49 +1170,74 @@ logger_upgrade_format(char *fn, logger * lg->catalog_bid = logbat_new(TYPE_int, BATSIZE, PERSISTENT); lg->catalog_nme = logbat_new(TYPE_str, BATSIZE, PERSISTENT); + v = BATmark(b, 0); - BATappend(lg->catalog_bid, BATmirror(v), FALSE); + if (v == NULL) + logger_fatal("logger_upgrade_format: cannot create view on bat", 0, 0, 0); + if (BATappend(lg->catalog_bid, BATmirror(v), FALSE) == NULL) + logger_fatal("logger_upgrade_format: BATappend failed", 0, 0, 0); BBPunfix(v->batCacheid); v = BATmark(BATmirror(b), 0); - BATappend(lg->catalog_nme, BATmirror(v), FALSE); + if (v == NULL) + logger_fatal("logger_upgrade_format: cannot create view on bat", 0, 0, 0); + if (BATappend(lg->catalog_nme, BATmirror(v), FALSE) == NULL) + logger_fatal("logger_upgrade_format: BATappend failed", 0, 0, 0); BBPunfix(v->batCacheid); /* Make persistent */ *bid = lg->catalog_bid->batCacheid; BBPincref(*bid, TRUE); snprintf(bak, BUFSIZ, "%s_catalog_bid", fn); - BBPrename(lg->catalog_bid->batCacheid, bak); + if (BBPrename(lg->catalog_bid->batCacheid, bak) < 0) + logger_fatal("logger_upgrade_format: BBPrename to %s failed", bak, 0, 0); /* Make persistent */ *bid = lg->catalog_nme->batCacheid; BBPincref(*bid, TRUE); snprintf(bak, BUFSIZ, "%s_catalog_nme", fn); - BBPrename(lg->catalog_nme->batCacheid, bak); + if (BBPrename(lg->catalog_nme->batCacheid, bak) < 0) + logger_fatal("logger_upgrade_format: BBPrename to %s failed", bak, 0, 0); + logbat_destroy(b); /* split snapshots -> snapshots_bid, snapshots_tid */ *bid = logger_find_bat(lg, "snapshots"); b = BATdescriptor(*bid); - if (b == 0) { + if (b == 0) logger_fatal("logger_upgrade_format: inconsistent database, '%s' snapshots does not exist", bak, 0, 0); - } lg->snapshots_bid = logbat_new(TYPE_int, 1, PERSISTENT); + if (lg->snapshots_bid == NULL) + logger_fatal("logger_upgrade_format: cannot create snapshot bat", 0, 0, 0); v = BATmark(b, 0); - BATappend(lg->snapshots_bid, BATmirror(v), FALSE); + if (v == NULL) + logger_fatal("logger_upgrade_format: cannot create view on bat", 0, 0, 0); + if (BATappend(lg->snapshots_bid, BATmirror(v), FALSE) == NULL) + logger_fatal("logger_upgrade_format: BATappend failed", 0, 0, 0); BBPunfix(v->batCacheid); snprintf(bak, BUFSIZ, "%s_snapshots_bid", fn); - BBPrename(lg->snapshots_bid->batCacheid, bak); + if (BBPrename(lg->snapshots_bid->batCacheid, bak) < 0) + logger_fatal("logger_upgrade_format: BBPrename to %s failed", bak, 0, 0); logger_add_bat(lg, lg->snapshots_bid, "snapshots_bid"); lg->snapshots_tid = logbat_new(TYPE_int, 1, PERSISTENT); + if (lg->snapshots_tid == NULL) + logger_fatal("logger_upgrade_format: cannot create snapshot bat", 0, 0, 0); + v = BATmark(BATmirror(b), 0); - BATappend(lg->snapshots_tid, BATmirror(v), FALSE); + if (v == NULL) + logger_fatal("logger_upgrade_format: cannot create view on bat", 0, 0, 0); + if (BATappend(lg->snapshots_tid, BATmirror(v), FALSE) == NULL) + logger_fatal("logger_upgrade_format: BATappend failed", 0, 0, 0); BBPunfix(v->batCacheid); snprintf(bak, BUFSIZ, "%s_snapshots_tid", fn); - BBPrename(lg->snapshots_tid->batCacheid, bak); + if (BBPrename(lg->snapshots_tid->batCacheid, bak) < 0) + logger_fatal("logger_upgrade_format: BBPrename to %s failed", bak, 0, 0); + logger_add_bat(lg, lg->snapshots_tid, "snapshots_tid"); + logbat_destroy(b); + /* split seqs -> seqs_id, seqs_val */ *bid = logger_find_bat(lg, "seqs"); b = BATdescriptor(*bid); @@ -1220,23 +1246,36 @@ logger_upgrade_format(char *fn, logger * } lg->seqs_id = logbat_new(TYPE_int, 1, PERSISTENT); + if (lg->seqs_id == NULL) + logger_fatal("logger_upgrade_format: cannot create sequences bat", 0, 0, 0); v = BATmark(b, 0); - BATappend(lg->seqs_id, BATmirror(v), FALSE); + if (v == NULL) + logger_fatal("logger_upgrade_format: cannot create view on bat", 0, 0, 0); + if (BATappend(lg->seqs_id, BATmirror(v), FALSE) == NULL) + logger_fatal("logger_upgrade_format: BATappend failed", 0, 0, 0); BBPunfix(v->batCacheid); snprintf(bak, BUFSIZ, "%s_seqs_id", fn); - BBPrename(lg->seqs_id->batCacheid, bak); + if (BBPrename(lg->seqs_id->batCacheid, bak) < 0) + logger_fatal("logger_upgrade_format: BBPrename to %s failed", bak, 0, 0); logger_add_bat(lg, lg->seqs_id, "seqs_id"); lg->seqs_val = logbat_new(TYPE_lng, 1, PERSISTENT); + if (lg->seqs_val == NULL) + logger_fatal("logger_upgrade_format: cannot create sequences bat", 0, 0, 0); v = BATmark(BATmirror(b), 0); - BATappend(lg->seqs_val, BATmirror(v), FALSE); + if (v == NULL) + logger_fatal("logger_upgrade_format: cannot create view on bat", 0, 0, 0); + if (BATappend(lg->seqs_val, BATmirror(v), FALSE) == NULL) + logger_fatal("logger_upgrade_format: BATappend failed", 0, 0, 0); BBPunfix(v->batCacheid); snprintf(bak, BUFSIZ, "%s_seqs_val", fn); - BBPrename(lg->seqs_val->batCacheid, bak); + if (BBPrename(lg->seqs_val->batCacheid, bak) < 0) + logger_fatal("logger_upgrade_format: BBPrename to %s failed", bak, 0, 0); logger_add_bat(lg, lg->seqs_val, "seqs_val"); logbat_destroy(b); - bm_subcommit(lg->catalog_bid, lg->catalog_nme, lg->catalog_bid, lg->catalog_nme, NULL, lg->debug); + if (bm_subcommit(lg->catalog_bid, lg->catalog_nme, lg->catalog_bid, lg->catalog_nme, NULL, lg->debug) < 0) + logger_fatal("logger_upgrade_format: commit of logger conversion failed", 0, 0, 0); logbat_destroy(lg->catalog_bid); logbat_destroy(lg->catalog_nme); logbat_destroy(lg->snapshots_bid); @@ -1266,6 +1305,8 @@ logger_create_catalog_file(int debug, lo lg->catalog_bid = logbat_new(TYPE_int, BATSIZE, PERSISTENT); lg->catalog_nme = logbat_new(TYPE_str, BATSIZE, PERSISTENT); + if (lg->catalog_bid == NULL || lg->catalog_nme == NULL) + logger_fatal("logger_create_catalog_file: cannot create catalog bats", 0, 0, 0); if (debug & 1) fprintf(stderr, "#create %s catalog\n", fn); @@ -1273,13 +1314,17 @@ logger_create_catalog_file(int debug, lo bid = lg->catalog_bid->batCacheid; BBPincref(bid, TRUE); snprintf(bak, BUFSIZ, "%s_catalog_bid", fn); - BBPrename(lg->catalog_bid->batCacheid, bak); + if (BBPrename(lg->catalog_bid->batCacheid, bak) < 0) + logger_fatal("logger_create_catalog_file: BBPrename to %s failed", bak, 0, 0); + /* Make persistent */ bid = lg->catalog_nme->batCacheid; BBPincref(bid, TRUE); snprintf(bak, BUFSIZ, "%s_catalog_nme", fn); - BBPrename(lg->catalog_nme->batCacheid, bak); + if (BBPrename(lg->catalog_nme->batCacheid, bak) < 0) + logger_fatal("logger_create_catalog_file: BBPrename to %s failed", bak, 0, 0); + if (!GDKcreatedir(filename)) { logger_fatal("logger_create_catalog_file: cannot create directory for log file %s\n", filename, 0, 0); @@ -1289,10 +1334,18 @@ logger_create_catalog_file(int debug, lo logger_fatal("logger_create_catalog_file: cannot create log file %s\n", filename, 0, 0); return LOG_ERR; } - fprintf(fp, "%06d\n\n", lg->version); lg->id++; - fprintf(fp, LLFMT "\n", lg->id); - fclose(fp); + if (fprintf(fp, "%06d\n\n" LLFMT "\n", lg->version, lg->id) < 0) { + fclose(fp); + unlink(filename); + logger_fatal("logger_create_catalog_file: writing log file %s failed", + filename, 0, 0); + } + if (fclose(fp) < 0) { + unlink(filename); + logger_fatal("logger_create_catalog_file: closing log file %s failed", + filename, 0, 0); + } fp = NULL; if (bm_subcommit(lg->catalog_bid, lg->catalog_nme, lg->catalog_bid, lg->catalog_nme, NULL, lg->debug) != 0) { @@ -1438,28 +1491,39 @@ logger_load(int debug, char* fn, char fi if (seqs_id == 0) { lg->seqs_id = logbat_new(TYPE_int, 1, PERSISTENT); snprintf(bak, BUFSIZ, "%s_seqs_id", fn); - BBPrename(lg->seqs_id->batCacheid, bak); + if (BBPrename(lg->seqs_id->batCacheid, bak) < 0) + logger_fatal("logger_load: BBPrename to %s failed", + bak, 0, 0); logger_add_bat(lg, lg->seqs_id, "seqs_id"); lg->seqs_val = logbat_new(TYPE_lng, 1, PERSISTENT); snprintf(bak, BUFSIZ, "%s_seqs_val", fn); - BBPrename(lg->seqs_val->batCacheid, bak); + if (BBPrename(lg->seqs_val->batCacheid, bak) < 0) + logger_fatal("logger_load: BBPrename to %s failed", + bak, 0, 0); logger_add_bat(lg, lg->seqs_val, "seqs_val"); - BUNappend(lg->seqs_id, &id, FALSE); - BUNappend(lg->seqs_val, &lg->id, FALSE); + if (BUNappend(lg->seqs_id, &id, FALSE) == NULL || + BUNappend(lg->seqs_val, &lg->id, FALSE) == NULL) + logger_fatal("logger_load: failed to append value to " + "sequences bat", 0, 0, 0); lg->snapshots_bid = logbat_new(TYPE_int, 1, PERSISTENT); snprintf(bak, BUFSIZ, "%s_snapshots_bid", fn); - BBPrename(lg->snapshots_bid->batCacheid, bak); + if (BBPrename(lg->snapshots_bid->batCacheid, bak) < 0) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list