Changeset: 4c92c9a50e0f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4c92c9a50e0f
Modified Files:
clients/Tests/exports.stable.out
monetdb5/modules/mal/bbp.c
monetdb5/modules/mal/bbp.h
monetdb5/modules/mal/bbp.mal
sql/backends/monet5/sql_inspect.mal
sql/backends/monet5/sql_scenario.c
sql/scripts/25_debug.sql
sql/test/leaks/Tests/check0.stable.out
sql/test/leaks/Tests/check0_gsl.stable.out
sql/test/leaks/Tests/check0_nogeom.stable.out
sql/test/leaks/Tests/check1.stable.out
sql/test/leaks/Tests/check1_gsl.stable.out
sql/test/leaks/Tests/check1_nogeom.stable.out
sql/test/leaks/Tests/check2.stable.out
sql/test/leaks/Tests/check2_gsl.stable.out
sql/test/leaks/Tests/check2_nogeom.stable.out
sql/test/leaks/Tests/check3.stable.out
sql/test/leaks/Tests/check3_gsl.stable.out
sql/test/leaks/Tests/check3_nogeom.stable.out
sql/test/leaks/Tests/check4.stable.out
sql/test/leaks/Tests/check4_gsl.stable.out
sql/test/leaks/Tests/check4_nogeom.stable.out
sql/test/leaks/Tests/check5.stable.out
sql/test/leaks/Tests/check5_gsl.stable.out
sql/test/leaks/Tests/check5_nogeom.stable.out
sql/test/leaks/Tests/drop3.stable.out
sql/test/leaks/Tests/drop3_gsl.stable.out
sql/test/leaks/Tests/drop3_nogeom.stable.out
sql/test/leaks/Tests/select1.stable.out
sql/test/leaks/Tests/select1_gsl.stable.out
sql/test/leaks/Tests/select1_nogeom.stable.out
sql/test/leaks/Tests/select2.stable.out
sql/test/leaks/Tests/select2_gsl.stable.out
sql/test/leaks/Tests/select2_nogeom.stable.out
sql/test/leaks/Tests/temp1.stable.out
sql/test/leaks/Tests/temp1_gsl.stable.out
sql/test/leaks/Tests/temp1_nogeom.stable.out
sql/test/leaks/Tests/temp2.stable.out
sql/test/leaks/Tests/temp2_gsl.stable.out
sql/test/leaks/Tests/temp2_nogeom.stable.out
sql/test/leaks/Tests/temp3.stable.out
sql/test/leaks/Tests/temp3_gsl.stable.out
sql/test/leaks/Tests/temp3_nogeom.stable.out
Branch: default
Log Message:
Changed bbp.get() to return void-headed bats.
Also updated the SQL code that uses this function.
diffs (truncated from 719 to 300 lines):
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
@@ -1191,7 +1191,7 @@ str CMDbatSUBsignal(Client cntxt, MalBlk
str CMDbatXOR(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
str CMDbatpartition(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
str CMDbatpartition2(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
-str CMDbbp(int *NS, int *HT, int *TT, int *CNT, int *REFCNT, int *LREFCNT, int
*LOCATION, int *HEAT, int *DIRTY, int *STATUS, int *KIND);
+str CMDbbp(bat *ID, bat *NS, bat *HT, bat *TT, bat *CNT, bat *REFCNT, bat
*LREFCNT, bat *LOCATION, bat *HEAT, bat *DIRTY, bat *STATUS, bat *KIND);
str CMDbbpCount(int *ret);
str CMDbbpDirty(int *ret);
str CMDbbpDiskReads(lng *ret);
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
@@ -1153,55 +1153,95 @@ str CMDbbpType( int *ret){
return MAL_SUCCEED;
}
-str CMDbbp( int *NS, int *HT, int *TT, int *CNT, int *REFCNT, int *LREFCNT,
int *LOCATION, int *HEAT, int *DIRTY, int *STATUS, int *KIND)
+str CMDbbp(bat *ID, bat *NS, bat *HT, bat *TT, bat *CNT, bat *REFCNT, bat
*LREFCNT, bat *LOCATION, bat *HEAT, bat *DIRTY, bat *STATUS, bat *KIND)
{
- BAT *ns, *ht, *tt, *cnt, *refcnt, *lrefcnt, *location, *heat,
*dirty, *status, *kind, *bn;
+ BAT *id, *ns, *ht, *tt, *cnt, *refcnt, *lrefcnt, *location, *heat,
*dirty, *status, *kind, *bn;
int i;
char buf[MAXPATHLEN];
- ns = BATnew(TYPE_int,TYPE_str,BBPsize);
- ht = BATnew(TYPE_int,TYPE_str,BBPsize);
- tt = BATnew(TYPE_int,TYPE_str,BBPsize);
- cnt = BATnew(TYPE_int,TYPE_lng,BBPsize);
- refcnt = BATnew(TYPE_int,TYPE_int,BBPsize);
- lrefcnt = BATnew(TYPE_int,TYPE_int,BBPsize);
- location = BATnew(TYPE_int,TYPE_str,BBPsize);
- heat = BATnew(TYPE_int,TYPE_int,BBPsize);
- dirty = BATnew(TYPE_int,TYPE_str,BBPsize);
- status = BATnew(TYPE_int,TYPE_str,BBPsize);
- kind = BATnew(TYPE_int,TYPE_str,BBPsize);
+ id = BATnew(TYPE_void, TYPE_int, BBPsize);
+ ns = BATnew(TYPE_void, TYPE_str, BBPsize);
+ ht = BATnew(TYPE_void, TYPE_str, BBPsize);
+ tt = BATnew(TYPE_void, TYPE_str, BBPsize);
+ cnt = BATnew(TYPE_void, TYPE_lng, BBPsize);
+ refcnt = BATnew(TYPE_void, TYPE_int, BBPsize);
+ lrefcnt = BATnew(TYPE_void, TYPE_int, BBPsize);
+ location = BATnew(TYPE_void, TYPE_str, BBPsize);
+ heat = BATnew(TYPE_void, TYPE_int, BBPsize);
+ dirty = BATnew(TYPE_void, TYPE_str, BBPsize);
+ status = BATnew(TYPE_void, TYPE_str, BBPsize);
+ kind = BATnew(TYPE_void, TYPE_str, BBPsize);
- if (!ns || !ht || !tt || !cnt || !refcnt || !lrefcnt || !location ||
!heat || !dirty || !status || !kind)
+ if (!id || !ns || !ht || !tt || !cnt || !refcnt || !lrefcnt ||
!location || !heat || !dirty || !status || !kind) {
+ if (id)
+ BBPreclaim(id);
+ if (ns)
+ BBPreclaim(ns);
+ if (ht)
+ BBPreclaim(ht);
+ if (tt)
+ BBPreclaim(tt);
+ if (cnt)
+ BBPreclaim(cnt);
+ if (refcnt)
+ BBPreclaim(refcnt);
+ if (lrefcnt)
+ BBPreclaim(lrefcnt);
+ if (location)
+ BBPreclaim(location);
+ if (heat)
+ BBPreclaim(heat);
+ if (dirty)
+ BBPreclaim(dirty);
+ if (status)
+ BBPreclaim(status);
+ if (kind)
+ BBPreclaim(kind);
throw(MAL, "catalog.bbp", MAL_MALLOC_FAIL);
+ }
+ BATseqbase(id, 0);
+ BATseqbase(ns, 0);
+ BATseqbase(ht, 0);
+ BATseqbase(tt, 0);
+ BATseqbase(cnt, 0);
+ BATseqbase(refcnt, 0);
+ BATseqbase(lrefcnt, 0);
+ BATseqbase(location, 0);
+ BATseqbase(heat, 0);
+ BATseqbase(dirty, 0);
+ BATseqbase(status, 0);
+ BATseqbase(kind, 0);
+ for (i = 1; i < BBPsize; i++) {
+ if (BBP_logical(i) && (BBP_refs(i) || BBP_lrefs(i))) {
+ bn = BATdescriptor(i);
+ if (bn) {
+ lng l = BATcount(bn);
+ int heat_ = BBP_lastused(i);
+ char *loc = BBP_cache(i) ? "load" : "disk";
+ char *mode = "persistent";
+ int refs = BBP_refs(i);
+ int lrefs = BBP_lrefs(i);
- for(i=1; i < BBPsize; i++)
- if (BBP_logical(i) && (BBP_refs(i) || BBP_lrefs(i))) {
- bn = BATdescriptor(i);
- if (bn) {
- lng l = BATcount(bn);
- int heat_ = BBP_lastused(i);
- char *loc = BBP_cache(i) ? "load" : "disk";
- char *mode = "persistent";
- int refs = BBP_refs(i);
- int lrefs = BBP_lrefs(i);
-
- if ((BBP_status(i) & BBPDELETED) || !(BBP_status(i) &
BBPPERSISTENT))
- mode = "transient";
- snprintf(buf,MAXPATHLEN,"%s",BBP_physical(i));
- BUNins(ns, &i, BBP_logical(i), FALSE);
- BUNins(ht, &i, BATatoms[BAThtype(bn)].name, FALSE);
- BUNins(tt, &i, BATatoms[BATttype(bn)].name, FALSE);
- BUNins(cnt, &i, &l, FALSE);
- BUNins(refcnt, &i, &refs, FALSE);
- BUNins(lrefcnt, &i, &lrefs, FALSE);
- BUNins(location, &i, buf, FALSE);
- BUNins(heat, &i, &heat_, FALSE);
- BUNins(dirty, &i, bn ? BATdirty(bn) ? "dirty" :
DELTAdirty(bn) ? "diffs" : "clean" : (BBP_status(i) & BBPSWAPPED) ? "diffs" :
"clean", FALSE);
- BUNins(status, &i, loc, FALSE);
- BUNins(kind, &i, mode, FALSE);
- BBPunfix(bn->batCacheid);
+ if ((BBP_status(i) & BBPDELETED) ||
!(BBP_status(i) & BBPPERSISTENT))
+ mode = "transient";
+ snprintf(buf, MAXPATHLEN, "%s",
BBP_physical(i));
+ BUNappend(id, &i, FALSE);
+ BUNappend(ns, BBP_logical(i), FALSE);
+ BUNappend(ht, BATatoms[BAThtype(bn)].name,
FALSE);
+ BUNappend(tt, BATatoms[BATttype(bn)].name,
FALSE);
+ BUNappend(cnt, &l, FALSE);
+ BUNappend(refcnt, &refs, FALSE);
+ BUNappend(lrefcnt, &lrefs, FALSE);
+ BUNappend(location, buf, FALSE);
+ BUNappend(heat, &heat_, FALSE);
+ BUNappend(dirty, bn ? BATdirty(bn) ? "dirty" :
DELTAdirty(bn) ? "diffs" : "clean" : (BBP_status(i) & BBPSWAPPED) ? "diffs" :
"clean", FALSE);
+ BUNappend(status, loc, FALSE);
+ BUNappend(kind, mode, FALSE);
+ BBPunfix(bn->batCacheid);
+ }
}
}
+ BBPkeepref(*ID = id->batCacheid);
BBPkeepref(*NS = ns->batCacheid);
BBPkeepref(*HT = ht->batCacheid);
BBPkeepref(*TT = tt->batCacheid);
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
@@ -92,5 +92,5 @@ bbp_export str CMDbbpdecompress(int *ret
bbp_export str CMDbbptruncate(int *ret, int *bid, str *fnme);
bbp_export str CMDbbpexpand(int *ret, int *bid, str *fnme);
bbp_export str CMDbbpType( int *ret);
-bbp_export str CMDbbp( int *NS, int *HT, int *TT, int *CNT, int *REFCNT, int
*LREFCNT, int *LOCATION, int *HEAT, int *DIRTY, int *STATUS, int *KIND);
+bbp_export str CMDbbp(bat *ID, bat *NS, bat *HT, bat *TT, bat *CNT, bat
*REFCNT, bat *LREFCNT, bat *LOCATION, bat *HEAT, bat *DIRTY, bat *STATUS, bat
*KIND);
#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
@@ -119,10 +119,12 @@ command getRNames() :bat[:oid,:str]
address CMDbbpRNames
comment "Map a BAT into its bbp physical name";
-command get() (ns:bat[:any_1,:any_2], ht:bat[:int,:str], tt:bat[:int,:str],
- cnt:bat[:int,:lng], refcnt:bat[:int,:int], lrefcnt:bat[:int,:int],
- location:bat[:int,:str], heat:bat[:int,:int],
dirty:bat[:int,:str],
- status:bat[:int,:str], kind:bat[:int,:str])
+command get() (id:bat[:oid,:int], ns:bat[:oid,:str],
+ ht:bat[:oid,:str], tt:bat[:oid,:str],
+ cnt:bat[:oid,:lng], refcnt:bat[:oid,:int],
+ lrefcnt:bat[:oid,:int], location:bat[:oid,:str],
+ heat:bat[:oid,:int], dirty:bat[:oid,:str],
+ status:bat[:oid,:str], kind:bat[:oid,:str])
address CMDbbp
comment "bpp";
diff --git a/sql/backends/monet5/sql_inspect.mal
b/sql/backends/monet5/sql_inspect.mal
--- a/sql/backends/monet5/sql_inspect.mal
+++ b/sql/backends/monet5/sql_inspect.mal
@@ -19,22 +19,3 @@ function sql_environment{inline}()(name:
(name,value):= inspect.getEnvironment();
return (name,value) := (name,value);
end sql_environment;
-
-function bbp{inline}()( id:bat[:oid,:int], name:bat[:oid,:str],
htype:bat[:oid,:str], ttype:bat[:oid,:str], count:bat[:oid,:lng],
refcnt:bat[:oid,:int], lrefcnt:bat[:oid,:int], location:bat[:oid,:str],
heat:bat[:oid,:int], dirty:bat[:oid,:str], status:bat[:oid,:str],
kind:bat[:oid,:str]);
-
- (ns,iht,itt,icnt,irefcnt,ilrefcnt,ilocation,iheat,idirty,istatus,ikind)
:= bbp.get();
- ri := algebra.markT(ns, 0:oid);
- i := bat.reverse(ri);
- n := algebra.markH(ns, 0:oid);
- ht := algebra.markH(iht, 0:oid);
- tt := algebra.markH(itt, 0:oid);
- cnt := algebra.markH(icnt, 0:oid);
- refcnt := algebra.markH(irefcnt, 0:oid);
- lrefcnt := algebra.markH(ilrefcnt, 0:oid);
- location := algebra.markH(ilocation, 0:oid);
- heat := algebra.markH(iheat, 0:oid);
- dirty := algebra.markH(idirty, 0:oid);
- status := algebra.markH(istatus, 0:oid);
- kind := algebra.markH(ikind, 0:oid);
- return (i,n,ht,tt,cnt,refcnt,lrefcnt,location,heat,dirty,status,kind);
-end bbp;
diff --git a/sql/backends/monet5/sql_scenario.c
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -847,6 +847,10 @@ sql_update_default(Client c)
pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n");
+ /* change in 25_debug.sql */
+ pos += snprintf(buf + pos, bufsize - pos, "drop function sys.bbp;\n");
+ pos += snprintf(buf + pos, bufsize - pos, "create function sys.bbp()
returns table (id int, name string, htype string, ttype string, count BIGINT,
refcnt int, lrefcnt int, location string, heat int, dirty string, status
string, kind string) external name bbp.get;\n");
+
/* new file 40_json.sql */
snprintf(buf + pos, bufsize - pos, "createdb%c40_json", DIR_SEP);
if ((fullname = MSP_locate_sqlscript(buf + pos, 1)) != NULL) {
diff --git a/sql/scripts/25_debug.sql b/sql/scripts/25_debug.sql
--- a/sql/scripts/25_debug.sql
+++ b/sql/scripts/25_debug.sql
@@ -56,7 +56,7 @@ create function sys.bbp ()
ttype string, count BIGINT, refcnt int, lrefcnt int,
location string, heat int, dirty string,
status string, kind string)
- external name sql.bbp;
+ external name bbp.get;
create procedure sys.evalAlgebra( ra_stmt string, opt bool)
external name sql."evalAlgebra";
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
@@ -65,7 +65,7 @@ Ready.
% L1, L2 # name
% char, wrd # type
% 9, 3 # length
-[ "transient", 396 ]
+[ "transient", 397 ]
#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_gsl.stable.out
b/sql/test/leaks/Tests/check0_gsl.stable.out
--- a/sql/test/leaks/Tests/check0_gsl.stable.out
+++ b/sql/test/leaks/Tests/check0_gsl.stable.out
@@ -79,7 +79,7 @@ Ready.
% L1, L2 # name
% char, wrd # type
% 9, 3 # length
-[ "transient", 396 ]
+[ "transient", 397 ]
#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_nogeom.stable.out
b/sql/test/leaks/Tests/check0_nogeom.stable.out
--- a/sql/test/leaks/Tests/check0_nogeom.stable.out
+++ b/sql/test/leaks/Tests/check0_nogeom.stable.out
@@ -65,7 +65,7 @@ Ready.
% L1, L2 # name
% char, wrd # type
% 9, 3 # length
-[ "transient", 392 ]
+[ "transient", 393 ]
#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
@@ -194,7 +194,7 @@ Ready.
% L1, L2 # name
% char, wrd # type
% 9, 3 # length
-[ "transient", 175 ]
+[ "transient", 176 ]
#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_gsl.stable.out
b/sql/test/leaks/Tests/check1_gsl.stable.out
--- a/sql/test/leaks/Tests/check1_gsl.stable.out
+++ b/sql/test/leaks/Tests/check1_gsl.stable.out
@@ -199,7 +199,7 @@ Ready.
% L1, L2 # name
% char, wrd # type
% 9, 3 # length
-[ "transient", 175 ]
+[ "transient", 176 ]
#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_nogeom.stable.out
b/sql/test/leaks/Tests/check1_nogeom.stable.out
--- a/sql/test/leaks/Tests/check1_nogeom.stable.out
+++ b/sql/test/leaks/Tests/check1_nogeom.stable.out
@@ -194,7 +194,7 @@ Ready.
% L1, L2 # name
% char, wrd # type
% 9, 3 # length
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list