Changeset: c473cd5ffa76 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c473cd5ffa76
Modified Files:
geom/monetdb5/geom.c
monetdb5/extras/mal_optimizer_template/opt_sql_append.c
monetdb5/extras/rapi/rapi.c
monetdb5/mal/mal_dataflow.c
monetdb5/mal/mal_debugger.c
monetdb5/mal/mal_factory.c
monetdb5/mal/mal_interpreter.c
monetdb5/mal/mal_interpreter.h
monetdb5/mal/mal_profiler.c
monetdb5/mal/mal_recycle.c
monetdb5/mal/mal_runtime.c
monetdb5/modules/atoms/batxml.c
monetdb5/modules/atoms/json.c
monetdb5/modules/atoms/xml.c
monetdb5/modules/kernel/algebra.c
monetdb5/modules/kernel/status.c
monetdb5/modules/mal/batExtensions.c
monetdb5/modules/mal/batcalc.c
monetdb5/modules/mal/bbp.c
monetdb5/modules/mal/calc.c
monetdb5/modules/mal/clients.c
monetdb5/modules/mal/cluster.c
monetdb5/modules/mal/factories.c
monetdb5/modules/mal/groupby.c
monetdb5/modules/mal/inspect.c
monetdb5/modules/mal/iterator.c
monetdb5/modules/mal/joinpath.c
monetdb5/modules/mal/language.c
monetdb5/modules/mal/mal_io.c
monetdb5/modules/mal/mal_mapi.c
monetdb5/modules/mal/manifold.c
monetdb5/modules/mal/manual.c
monetdb5/modules/mal/mat.c
monetdb5/modules/mal/mdb.c
monetdb5/modules/mal/mkey.c
monetdb5/modules/mal/profiler.c
monetdb5/modules/mal/querylog.c
monetdb5/modules/mal/recycle.c
monetdb5/modules/mal/remote.c
monetdb5/modules/mal/sysmon.c
monetdb5/modules/mal/tokenizer.c
monetdb5/modules/mal/trader.c
monetdb5/modules/mal/transaction.c
monetdb5/optimizer/opt_centipede.c
monetdb5/optimizer/opt_octopus.c
monetdb5/optimizer/opt_wrapper.c
monetdb5/optimizer/optimizer.c
monetdb5/scheduler/run_adder.c
monetdb5/scheduler/run_memo.c
monetdb5/scheduler/run_octopus.c
monetdb5/scheduler/srvpool.c
sql/backends/monet5/LSST/lsst.c
sql/backends/monet5/bam/bam_export.c
sql/backends/monet5/bam/bam_loader.c
sql/backends/monet5/datacell/basket.c
sql/backends/monet5/datacell/datacell.c
sql/backends/monet5/datacell/petrinet.c
sql/backends/monet5/generator/generator.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_cast.c
sql/backends/monet5/sql_rdf.c
sql/backends/monet5/sql_scenario.c
sql/backends/monet5/sql_statistics.c
sql/backends/monet5/sql_user.c
sql/backends/monet5/vaults/fits.c
sql/backends/monet5/vaults/mseed.c
sql/backends/monet5/vaults/vault.c
Branch: Oct2014
Log Message:
Introduce getArgReference_{bte,bit,sht,...} to make sure we use correct types.
Most of the calls to getArgReference have been replaced by
type-specific calls like getArgReference_int and also
getArgReference_TYPE which has an extra TYPE parameter at the end.
These macros do three things:
- they return a properly typed value (so no extra casting should be
needed);
- there is no switch involved to get a pointer to the correct field in
the union (i.e. it should be slightly faster);
- on GCC with assertions enabled, they cause an assertion error if the
expected type (as encoded in the macro name) and the actual
argument's type don't match.
Using this, a whole bunch of errors were corrected, e.g. where int was
used when the argument was bit (really bad!) or where int was used
where the argument was bat (not really good either).
diffs (truncated from 6186 to 300 lines):
diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c
--- a/geom/monetdb5/geom.c
+++ b/geom/monetdb5/geom.c
@@ -80,7 +80,7 @@ geom_export wkb *geos2wkb(GEOSGeom geosG
geom_export str wkbgetcoordX(double *out, wkb **geom);
geom_export str wkbgetcoordY(double *out, wkb **geom);
geom_export str wkbcreatepoint(wkb **out, dbl *x, dbl *y);
-geom_export str wkbcreatepoint_bat(int *out, int *x, int *y);
+geom_export str wkbcreatepoint_bat(int *out, bat *x, bat *y);
geom_export str mbroverlaps(bit *out, mbr **b1, mbr **b2);
geom_export str wkbDimension(int *out, wkb **geom);
geom_export str wkbGeometryTypeId(int *out, wkb **geom);
@@ -768,7 +768,7 @@ wkbcreatepoint(wkb **out, dbl *x, dbl *y
}
str
-wkbcreatepoint_bat(int *out, int *ix, int *iy)
+wkbcreatepoint_bat(int *out, bat *ix, bat *iy)
{
BAT *bo = NULL, *bx = NULL, *by = NULL;
dbl *x = NULL, *y = NULL;
diff --git a/monetdb5/extras/mal_optimizer_template/opt_sql_append.c
b/monetdb5/extras/mal_optimizer_template/opt_sql_append.c
--- a/monetdb5/extras/mal_optimizer_template/opt_sql_append.c
+++ b/monetdb5/extras/mal_optimizer_template/opt_sql_append.c
@@ -281,8 +281,8 @@ str OPTsql_append(Client cntxt, MalBlkPt
throw(MAL, "optimizer.sql_append", ILLARG_CONSTANTS);
}
if( stk != 0){
- modnme= *(str*)getArgReference(stk,p,1);
- fcnnme= *(str*)getArgReference(stk,p,2);
+ modnme= *getArgReference_str(stk,p,1);
+ fcnnme= *getArgReference_str(stk,p,2);
} else {
modnme= getArgDefault(mb,p,1);
fcnnme= getArgDefault(mb,p,2);
diff --git a/monetdb5/extras/rapi/rapi.c b/monetdb5/extras/rapi/rapi.c
--- a/monetdb5/extras/rapi/rapi.c
+++ b/monetdb5/extras/rapi/rapi.c
@@ -79,7 +79,7 @@
do {
\
tpe v;
\
retsxp = PROTECT(NEW_INTEGER(1));
\
- v = *(tpe*) getArgReference(stk,pci,i); \
+ v = *getArgReference_##tpe(stk,pci,i); \
if ( v == tpe##_nil)
\
INTEGER_POINTER(retsxp)[0] = NA_INTEGER; \
else
\
@@ -90,7 +90,7 @@
do {
\
tpe v;
\
retsxp = PROTECT(NEW_NUMERIC(1));
\
- v = * (tpe*) getArgReference(stk,pci,i); \
+ v = * getArgReference_##tpe(stk,pci,i); \
if ( v == tpe##_nil)
\
NUMERIC_POINTER(retsxp)[0] = NA_REAL; \
else
\
@@ -398,7 +398,7 @@ rapi_export str RAPIevalAggr(Client cntx
str RAPIeval(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, bit
grouped) {
sql_func * sqlfun = *(sql_func**) getArgReference(stk, pci, pci->retc);
- str exprStr = *(str*) getArgReference(stk, pci, pci->retc + 1);
+ str exprStr = *getArgReference_str(stk, pci, pci->retc + 1);
SEXP x, env, retval;
SEXP varname = R_NilValue;
@@ -481,14 +481,14 @@ str RAPIeval(Client cntxt, MalBlkPtr mb,
goto wrapup;
}
if ( getArgType(mb,pci,i) == TYPE_str)
- BUNappend(b, *(str*) getArgReference(stk, pci,
i), FALSE);
+ BUNappend(b, *getArgReference_str(stk, pci, i),
FALSE);
else
BUNappend(b, getArgReference(stk, pci, i),
FALSE);
BATsetcount(b, 1);
BATseqbase(b, 0);
BATsettrivprop(b);
} else {
- b = BATdescriptor(*(int*) getArgReference(stk, pci, i));
+ b = BATdescriptor(*getArgReference_bat(stk, pci, i));
if (b == NULL) {
msg = createException(MAL, "rapi.eval",
MAL_MALLOC_FAIL);
goto wrapup;
@@ -599,7 +599,6 @@ str RAPIeval(Client cntxt, MalBlkPtr mb,
for (i = 0; i < pci->retc; i++) {
SEXP ret_col = VECTOR_ELT(retval, i);
int bat_type = ATOMstorage(getColumnType(getArgType(mb,pci,i)));
- int *ret = (int *) getArgReference(stk, pci, i);
cnt = (BUN) ret_rows;
// hand over the vector into a BAT
@@ -702,10 +701,10 @@ str RAPIeval(Client cntxt, MalBlkPtr mb,
// bat return
if (isaBatType(getArgType(mb,pci,i))) {
- *ret = b->batCacheid;
+ *getArgReference_bat(stk, pci, i) = b->batCacheid;
BBPkeepref(b->batCacheid);
} else { // single value return, only for non-grouped
aggregations
- VALinit(getArgReference(stk, pci, i), bat_type,
+ VALinit(&stk->stk[pci->argv[i]], bat_type,
Tloc(b, BUNfirst(b)));
}
msg = MAL_SUCCEED;
diff --git a/monetdb5/mal/mal_dataflow.c b/monetdb5/mal/mal_dataflow.c
--- a/monetdb5/mal/mal_dataflow.c
+++ b/monetdb5/mal/mal_dataflow.c
@@ -735,7 +735,7 @@ runMALdataflow(Client cntxt, MalBlkPtr m
DataFlow flow = NULL;
str msg = MAL_SUCCEED;
int size;
- int *ret;
+ bit *ret;
int i;
#ifdef DEBUG_FLOW
@@ -746,7 +746,7 @@ runMALdataflow(Client cntxt, MalBlkPtr m
/* in debugging mode we should not start multiple threads */
if (stk == NULL)
throw(MAL, "dataflow", "runMALdataflow(): Called with stk ==
NULL");
- ret = (int*) getArgReference(stk,getInstrPtr(mb,startpc),0);
+ ret = getArgReference_bit(stk,getInstrPtr(mb,startpc),0);
*ret = FALSE;
if (stk->cmd) {
*ret = TRUE;
diff --git a/monetdb5/mal/mal_debugger.c b/monetdb5/mal/mal_debugger.c
--- a/monetdb5/mal/mal_debugger.c
+++ b/monetdb5/mal/mal_debugger.c
@@ -60,7 +60,7 @@ typedef struct MDBSTATE{
static void printStackElm(stream *f, MalBlkPtr mb, ValPtr v, int index, BUN
cnt, BUN first);
static void printStackHdr(stream *f, MalBlkPtr mb, ValPtr v, int index);
-static void printBATelm(stream *f, int i, BUN cnt, BUN first);
+static void printBATelm(stream *f, bat i, BUN cnt, BUN first);
static void printBatDetails(stream *f, int bid);
static void printBatInfo(stream *f, VarPtr n, ValPtr v);
static void printBatProperties(stream *f, VarPtr n, ValPtr v, str props);
@@ -1193,7 +1193,7 @@ mdbGrab(Client cntxt, MalBlkPtr mb1, Mal
str
mdbTrapClient(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p)
{
- int id = *(int *) getArgReference(stk, p, 1);
+ int id = *getArgReference_int(stk, p, 1);
Client c;
(void) cntxt;
@@ -1245,7 +1245,7 @@ printStack(stream *f, MalBlkPtr mb, MalS
}
static void
-printBATelm(stream *f, int i, BUN cnt, BUN first)
+printBATelm(stream *f, bat i, BUN cnt, BUN first)
{
BAT *b, *bs;
str tpe;
@@ -1349,7 +1349,7 @@ printStackElm(stream *f, MalBlkPtr mb, V
if (cnt && v && (isaBatType(n->type) || v->vtype == TYPE_bat) &&
v->val.bval != bat_nil) {
BAT *b, *bs;
- b = BATdescriptor(v->val.ival);
+ b = BATdescriptor(v->val.bval);
if (b == NULL) {
mnstr_printf(f, "Could not access descriptor\n");
return;
@@ -1372,10 +1372,10 @@ printStackElm(stream *f, MalBlkPtr mb, V
}
static void
-printBatDetails(stream *f, int bid)
+printBatDetails(stream *f, bat bid)
{
BAT *b[2];
- int ret,ret2;
+ bat ret,ret2;
MALfcn fcn;
/* at this level we don't know bat kernel primitives */
@@ -1387,8 +1387,10 @@ printBatDetails(stream *f, int bid)
if (b[0] == NULL)
return;
b[1] = BATdescriptor(ret2);
- if (b[1] == NULL)
+ if (b[1] == NULL) {
+ BBPunfix(b[0]->batCacheid);
return;
+ }
BATmultiprintf(f, 3, b, TRUE, 0, TRUE);
BBPunfix(b[0]->batCacheid);
BBPunfix(b[1]->batCacheid);
@@ -1406,8 +1408,8 @@ static void
printBatProperties(stream *f, VarPtr n, ValPtr v, str props)
{
if (isaBatType(n->type) && v->val.ival) {
- int bid;
- int ret,ret2;
+ bat bid;
+ bat ret,ret2;
MALfcn fcn;
BUN p;
@@ -1429,6 +1431,10 @@ printBatProperties(stream *f, VarPtr n,
b[1] = BATdescriptor(ret2);
if (b[0] == NULL || b[1] == NULL) {
mnstr_printf(f, "Could not access
descriptor\n");
+ if (b[0])
+ BBPunfix(b[0]->batCacheid);
+ if (b[1])
+ BBPunfix(b[1]->batCacheid);
return;
}
p = BUNfnd(b[0], props);
@@ -1453,7 +1459,7 @@ static str
memProfileVector(stream *out, int cells)
{
str v;
- int i;
+ bat i;
if (cells <= 0)
return GDKstrdup("");
diff --git a/monetdb5/mal/mal_factory.c b/monetdb5/mal/mal_factory.c
--- a/monetdb5/mal/mal_factory.c
+++ b/monetdb5/mal/mal_factory.c
@@ -121,7 +121,7 @@ runFactory(Client cntxt, MalBlkPtr mb, M
of the factory */
i = psig->retc;
for (k = pci->retc; i < pci->argc; i++, k++) {
- lhs = getArgReference(pl->stk,psig,k);
+ lhs = &pl->stk->stk[psig->argv[k]];
/* variable arguments ? */
if (k == psig->argc - 1)
k--;
@@ -209,7 +209,7 @@ callFactory(Client cntxt, MalBlkPtr mb,
* released to make room for the new ones.
*/
for (i = psig->retc; i < psig->argc; i++) {
- lhs = getArgReference(pl->stk,psig,i);
+ lhs = &pl->stk->stk[psig->argv[i]];
if( lhs->vtype == TYPE_bat )
BBPdecref(lhs->val.bval, TRUE);
}
@@ -217,7 +217,7 @@ callFactory(Client cntxt, MalBlkPtr mb,
/* copy the calling arguments onto the stack of the factory */
i = psig->retc;
for (i = psig->retc; i < psig->argc; i++) {
- lhs = getArgReference(pl->stk,psig,i);
+ lhs = &pl->stk->stk[psig->argv[i]];
VALcopy(lhs, argv[i]);
if( lhs->vtype == TYPE_bat )
BBPincref(lhs->val.bval, TRUE);
@@ -226,7 +226,7 @@ callFactory(Client cntxt, MalBlkPtr mb,
/* garbage collect the string arguments, these positions
will simply be overwritten the next time.
for (i = psig->retc; i < psig->argc; i++)
- garbageElement(lhs = getArgReference(pl->stk,psig,i));
+ garbageElement(lhs = &pl->stk->stk[psig->argv[i]]);
*/
return ret;
}
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -83,172 +83,172 @@ str malCommandCall(MalStkPtr stk, InstrP
case 0: ret = (str)(*pci->fcn)();
break;
case 1: ret = (str)(*pci->fcn)(
- (ptr)getArgReference(stk, pci, 0));
+ getArgReference(stk, pci, 0));
break;
case 2: ret = (str)(*pci->fcn)(
- (ptr)getArgReference(stk, pci, 0),
- (ptr)getArgReference(stk, pci, 1));
+ getArgReference(stk, pci, 0),
+ getArgReference(stk, pci, 1));
break;
case 3: ret = (str)(*pci->fcn)(
- (ptr)getArgReference(stk, pci, 0),
- (ptr)getArgReference(stk, pci, 1),
- (ptr)getArgReference(stk, pci, 2));
+ getArgReference(stk, pci, 0),
+ getArgReference(stk, pci, 1),
+ getArgReference(stk, pci, 2));
break;
case 4: ret = (str)(*pci->fcn)(
- (ptr)getArgReference(stk, pci, 0),
- (ptr)getArgReference(stk, pci, 1),
- (ptr)getArgReference(stk, pci, 2),
- (ptr)getArgReference(stk, pci, 3));
+ getArgReference(stk, pci, 0),
+ getArgReference(stk, pci, 1),
+ getArgReference(stk, pci, 2),
+ getArgReference(stk, pci, 3));
break;
case 5: ret = (str)(*pci->fcn)(
- (ptr)getArgReference(stk, pci, 0),
- (ptr)getArgReference(stk, pci, 1),
- (ptr)getArgReference(stk, pci, 2),
- (ptr)getArgReference(stk, pci, 3),
- (ptr)getArgReference(stk, pci, 4));
+ getArgReference(stk, pci, 0),
+ getArgReference(stk, pci, 1),
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list