Changeset: 068527f42989 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=068527f42989
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
clients/Tests/exports.stable.out
gdk/gdk_logger.c
monetdb5/modules/mal/bbp.c
monetdb5/modules/mal/bbp.h
monetdb5/modules/mal/bbp.mal
sql/test/leaks/Tests/check0.stable.out
sql/test/leaks/Tests/check0.stable.out.int128
sql/test/leaks/Tests/check1.stable.out
sql/test/leaks/Tests/check1.stable.out.int128
sql/test/leaks/Tests/check2.stable.out
sql/test/leaks/Tests/check2.stable.out.int128
sql/test/leaks/Tests/check3.stable.out
sql/test/leaks/Tests/check3.stable.out.int128
sql/test/leaks/Tests/check4.stable.out
sql/test/leaks/Tests/check4.stable.out.int128
sql/test/leaks/Tests/check5.stable.out
sql/test/leaks/Tests/check5.stable.out.int128
sql/test/leaks/Tests/select1.stable.out
sql/test/leaks/Tests/select1.stable.out.int128
sql/test/leaks/Tests/select2.stable.out
sql/test/leaks/Tests/select2.stable.out.int128
Branch: Jun2016
Log Message:
Merge with Jul2015 branch.
diffs (truncated from 1379 to 300 lines):
diff --git a/clients/Tests/MAL-signatures.stable.out
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -31232,6 +31232,10 @@ command bbp.getIndex(b:bat[:any_2]):int
address CMDbbpgetIndex;
comment Retrieve the index in the BBP
+command bbp.setName(b:bat[:oid,:any_1],n:str):str
+address CMDsetName;
+comment Rename a BAT
+
command blob.blob(s:str):blob
address BLOBblob_fromstr;
command blob.blob(s:blob):blob
diff --git a/clients/Tests/MAL-signatures.stable.out.int128
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -40205,6 +40205,10 @@ command bbp.getIndex(b:bat[:any_2]):int
address CMDbbpgetIndex;
comment Retrieve the index in the BBP
+command bbp.setName(b:bat[:oid,:any_1],n:str):str
+address CMDsetName;
+comment Rename a BAT
+
command blob.blob(s:str):blob
address BLOBblob_fromstr;
command blob.blob(s:blob):blob
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
@@ -1067,6 +1067,7 @@ str CMDscience_bat_flt_sqrt(bat *ret, co
str CMDscience_bat_flt_tan(bat *ret, const bat *bid);
str CMDscience_bat_flt_tanh(bat *ret, const bat *bid);
str CMDsetHeartbeat(void *res, int *ev);
+str CMDsetName(str *rname, const bat *b, str *name);
str CMDsetoid(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
str CMDstartProfiler(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
str CMDstartTrace(void *res);
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1185,11 +1185,40 @@ bm_tids(BAT *b, BAT *d)
}
+static void
+logger_fatal(const char *format, const char *arg1, const char *arg2, const
char *arg3)
+{
+ char *buf;
+
+ GDKfatal(format, arg1, arg2, arg3);
+ GDKlog(format, arg1, arg2, arg3);
+ if ((buf = GDKerrbuf) != NULL) {
+ fprintf(stderr, "%s", buf);
+ fflush(stderr);
+ }
+ GDKexit(1);
+}
+
+static void
+logger_switch_bat( BAT *old, BAT *new, const char *fn, const char *name)
+{
+ char bak[BUFSIZ];
+
+ if (BATmode(old, TRANSIENT) != GDK_SUCCEED)
+ logger_fatal("Logger_new: cannot convert old %s to transient",
name, 0, 0);
+ snprintf(bak, sizeof(bak), "tmp_%o", old->batCacheid);
+ if (BBPrename(old->batCacheid, bak) != 0)
+ logger_fatal("Logger_new: cannot rename old %s", name, 0, 0);
+ snprintf(bak, sizeof(bak), "%s_%s", fn, name);
+ if (BBPrename(new->batCacheid, bak) != 0)
+ logger_fatal("Logger_new: cannot rename new %s", name, 0, 0);
+}
+
static gdk_return
-bm_subcommit(BAT *list_bid, BAT *list_nme, BAT *catalog_bid, BAT *catalog_nme,
BAT *dcatalog, BAT *extra, int debug)
+bm_subcommit(logger *lg, BAT *list_bid, BAT *list_nme, BAT *catalog_bid, BAT
*catalog_nme, BAT *dcatalog, BAT *extra, int debug)
{
BUN p, q;
- BUN nn = 4 + BATcount(list_bid) + (extra ? BATcount(extra) : 0);
+ BUN nn = 6 + BATcount(list_bid) + (extra ? BATcount(extra) : 0);
bat *n = GDKmalloc(sizeof(bat) * nn);
int i = 0;
BATiter iter = (list_nme)?bat_iterator(list_nme):bat_iterator(list_bid);
@@ -1227,20 +1256,30 @@ bm_subcommit(BAT *list_bid, BAT *list_nm
n[i++] = abs(catalog_nme->batCacheid);
n[i++] = abs(dcatalog->batCacheid);
assert((BUN) i <= nn);
- if (BATcount(dcatalog) && catalog_bid == list_bid && catalog_nme ==
list_nme) {
- BAT *bids, *nmes, *tids = bm_tids(catalog_bid, dcatalog);
+ if (BATcount(dcatalog) > (BATcount(catalog_nme)/2) && catalog_bid ==
list_bid && catalog_nme == list_nme && lg->catalog_bid == catalog_bid) {
+ BAT *bids, *nmes, *tids = bm_tids(catalog_bid, dcatalog), *b;
- bids = BATproject(tids, catalog_bid);
- nmes = BATproject(tids, catalog_nme);
+ bids = logbat_new(TYPE_int, BATSIZE, PERSISTENT);
+ nmes = logbat_new(TYPE_str, BATSIZE, PERSISTENT);
+ b = BATproject(tids, catalog_bid);
+ BATappend(bids, b, TRUE);
+ logbat_destroy(b);
+ b = BATproject(tids, catalog_nme);
+ BATappend(nmes, b, TRUE);
+ logbat_destroy(b);
logbat_destroy(tids);
- BATclear(catalog_bid, TRUE);
- BATclear(catalog_nme, TRUE);
BATclear(dcatalog, TRUE);
- BATappend(catalog_bid, bids, FALSE);
- BATappend(catalog_nme, nmes, FALSE);
- logbat_destroy(bids);
- logbat_destroy(nmes);
+ logger_switch_bat(catalog_bid, bids, lg->fn, "catalog_bid");
+ logger_switch_bat(catalog_nme, nmes, lg->fn, "catalog_nme");
+ n[i++] = bids->batCacheid;
+ n[i++] = nmes->batCacheid;
+
+ logbat_destroy(lg->catalog_bid);
+ logbat_destroy(lg->catalog_nme);
+
+ lg->catalog_bid = catalog_bid = bids;
+ lg->catalog_nme = catalog_nme = nmes;
}
BATcommit(catalog_bid);
BATcommit(catalog_nme);
@@ -1252,20 +1291,6 @@ bm_subcommit(BAT *list_bid, BAT *list_nm
return res;
}
-static void
-logger_fatal(const char *format, const char *arg1, const char *arg2, const
char *arg3)
-{
- char *buf;
-
- GDKfatal(format, arg1, arg2, arg3);
- GDKlog(format, arg1, arg2, arg3);
- if ((buf = GDKerrbuf) != NULL) {
- fprintf(stderr, "%s", buf);
- fflush(stderr);
- }
- GDKexit(1);
-}
-
/* Set the logdir path, add a dbfarm if needed.
* Returns the role of the dbfarm containing the logdir.
*/
@@ -1429,7 +1454,7 @@ logger_load(int debug, const char* fn, c
}
fp = NULL;
- if (bm_subcommit(lg->catalog_bid, lg->catalog_nme,
lg->catalog_bid, lg->catalog_nme, lg->dcatalog, NULL, lg->debug) !=
GDK_SUCCEED) {
+ if (bm_subcommit(lg, lg->catalog_bid, lg->catalog_nme,
lg->catalog_bid, lg->catalog_nme, lg->dcatalog, NULL, lg->debug) !=
GDK_SUCCEED) {
/* cannot commit catalog, so remove log */
unlink(filename);
goto error;
@@ -1484,22 +1509,8 @@ logger_load(int debug, const char* fn, c
logger_fatal("logger_load: cannot
create BAT", 0, 0, 0);
list[3] = b2->batCacheid;
list[4] = n2->batCacheid;
- if (BATmode(b, TRANSIENT) != GDK_SUCCEED)
- logger_fatal("logger_load: cannot
convert old catalog_bid to transient", 0, 0, 0);
- if (BATmode(n, TRANSIENT) != GDK_SUCCEED)
- logger_fatal("logger_load: cannot
convert old catalog_nme to transient", 0, 0, 0);
- snprintf(bak, sizeof(bak), "tmp_%o",
b->batCacheid);
- if (BBPrename(b->batCacheid, bak) != 0)
- logger_fatal("logger_load: cannot
rename old catalog_bid", 0, 0, 0);
- snprintf(bak, sizeof(bak), "tmp_%o",
n->batCacheid);
- if (BBPrename(n->batCacheid, bak) != 0)
- logger_fatal("logger_load: cannot
rename old catalog_nme", 0, 0, 0);
- snprintf(bak, sizeof(bak), "%s_catalog_bid",
fn);
- if (BBPrename(b2->batCacheid, bak) != 0)
- logger_fatal("logger_load: cannot
rename new catalog_bid", 0, 0, 0);
- snprintf(bak, sizeof(bak), "%s_catalog_nme",
fn);
- if (BBPrename(n2->batCacheid, bak) != 0)
- logger_fatal("logger_load: cannot
rename new catalog_nme", 0, 0, 0);
+ logger_switch_bat(b, b2, fn, "catalog_bid");
+ logger_switch_bat(n, n2, fn, "catalog_bid");
bi = bat_iterator(b);
ni = bat_iterator(n);
BATloop(b, p, q) {
@@ -1593,7 +1604,7 @@ logger_load(int debug, const char* fn, c
bak, 0, 0);
logger_add_bat(lg, lg->dsnapshots, "dsnapshots");
- if (bm_subcommit(lg->catalog_bid, lg->catalog_nme,
lg->catalog_bid, lg->catalog_nme, lg->dcatalog, NULL, lg->debug) != GDK_SUCCEED)
+ if (bm_subcommit(lg, lg->catalog_bid, lg->catalog_nme,
lg->catalog_bid, lg->catalog_nme, lg->dcatalog, NULL, lg->debug) != GDK_SUCCEED)
logger_fatal("Logger_new: commit failed", 0, 0, 0);
} else {
bat seqs_id = logger_find_bat(lg, "seqs_id");
@@ -2601,7 +2612,7 @@ log_tend(logger *lg)
fprintf(stderr, "!ERROR: log_tend: semijoin failed\n");
return LOG_ERR;
}
- res = bm_subcommit(bids, NULL, lg->snapshots_bid,
+ res = bm_subcommit(lg, bids, NULL, lg->snapshots_bid,
lg->snapshots_tid, lg->dsnapshots, NULL,
lg->debug);
BBPunfix(bids->batCacheid);
}
@@ -2759,7 +2770,7 @@ bm_commit(logger *lg)
fprintf(stderr, "#bm_commit: create %d (%d)\n",
bid, BBP_lrefs(bid));
}
- res = bm_subcommit(lg->catalog_bid, lg->catalog_nme, lg->catalog_bid,
lg->catalog_nme, lg->dcatalog, n, lg->debug);
+ res = bm_subcommit(lg, lg->catalog_bid, lg->catalog_nme,
lg->catalog_bid, lg->catalog_nme, lg->dcatalog, n, lg->debug);
BBPreclaim(n);
BATclear(lg->freed, FALSE);
BATcommit(lg->freed);
diff --git a/monetdb5/modules/mal/bbp.c b/monetdb5/modules/mal/bbp.c
--- a/monetdb5/modules/mal/bbp.c
+++ b/monetdb5/modules/mal/bbp.c
@@ -475,3 +475,15 @@ str CMDbbp(bat *ID, bat *NS, bat *TT, ba
return MAL_SUCCEED;
}
+str
+CMDsetName(str *rname, const bat *bid, str *name)
+{
+ BAT *b;
+ if ((b = BATdescriptor(*bid)) == NULL) {
+ throw(MAL, "bbp.setName", INTERNAL_BAT_ACCESS);
+ }
+ BBPrename(b->batCacheid, *name);
+ *rname = GDKstrdup(*name);
+ BBPunfix(b->batCacheid);
+ return MAL_SUCCEED;
+}
diff --git a/monetdb5/modules/mal/bbp.h b/monetdb5/modules/mal/bbp.h
--- a/monetdb5/modules/mal/bbp.h
+++ b/monetdb5/modules/mal/bbp.h
@@ -54,4 +54,5 @@ bbp_export str CMDbbpgetIndex(int *res,
bbp_export str CMDgetBATrefcnt(int *res, bat *bid);
bbp_export str CMDgetBATlrefcnt(int *res, bat *bid);
bbp_export str CMDbbp(bat *ID, bat *NS, bat *TT, bat *CNT, bat *REFCNT, bat
*LREFCNT, bat *LOCATION, bat *HEAT, bat *DIRTY, bat *STATUS, bat *KIND);
+bbp_export str CMDsetName(str *rname, const bat *b, str *name);
#endif /* _BBP_H_*/
diff --git a/monetdb5/modules/mal/bbp.mal b/monetdb5/modules/mal/bbp.mal
--- a/monetdb5/modules/mal/bbp.mal
+++ b/monetdb5/modules/mal/bbp.mal
@@ -31,6 +31,9 @@ comment "bpp";
command getName( b:bat[:any_1]):str
address CMDbbpName
comment "Map a BAT into its internal name";
+command setName( b:bat[:any_1], n:str):str
+address CMDsetName
+comment "Rename a BAT";
command getCount() :bat[:lng]
address CMDbbpCount
comment "Create a BAT with the cardinalities of all known BATs";
diff --git a/sql/test/leaks/Tests/check0.stable.out
b/sql/test/leaks/Tests/check0.stable.out
--- a/sql/test/leaks/Tests/check0.stable.out
+++ b/sql/test/leaks/Tests/check0.stable.out
@@ -80,7 +80,7 @@ Ready.
% L1, L2 # name
% char, wrd # type
% 9, 3 # length
-[ "transient", 544 ]
+[ "transient", 547 ]
#select 'persistent', count(*) from bbp() as bbp where kind like 'pers%';
% .L1, .L2 # table_name
% L1, L2 # name
diff --git a/sql/test/leaks/Tests/check0.stable.out.int128
b/sql/test/leaks/Tests/check0.stable.out.int128
--- a/sql/test/leaks/Tests/check0.stable.out.int128
+++ b/sql/test/leaks/Tests/check0.stable.out.int128
@@ -80,7 +80,7 @@ Ready.
% L1, L2 # name
% char, wrd # type
% 9, 3 # length
-[ "transient", 545 ]
+[ "transient", 548 ]
#select 'persistent', count(*) from bbp() as bbp where kind like 'pers%';
% .L1, .L2 # table_name
% L1, L2 # name
diff --git a/sql/test/leaks/Tests/check1.stable.out
b/sql/test/leaks/Tests/check1.stable.out
--- a/sql/test/leaks/Tests/check1.stable.out
+++ b/sql/test/leaks/Tests/check1.stable.out
@@ -40,12 +40,10 @@ Ready.
[ "bit", 5 ]
[ "bit", 56 ]
[ "bit", 373 ]
-[ "bit", 1615 ]
-[ "bit", 1615 ]
-[ "bit", 1615 ]
-[ "bte", 4501 ]
-[ "int", 0 ]
-[ "int", 0 ]
+[ "bit", 1628 ]
+[ "bit", 1628 ]
+[ "bit", 1628 ]
+[ "bte", 4589 ]
[ "int", 0 ]
[ "int", 0 ]
[ "int", 0 ]
@@ -97,12 +95,12 @@ Ready.
[ "int", 13 ]
[ "int", 32 ]
[ "int", 32 ]
-[ "int", 35 ]
-[ "int", 35 ]
-[ "int", 35 ]
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list