Changeset: d635ebc6bf9d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d635ebc6bf9d Modified Files: monetdb5/modules/mal/mal_weld.c Branch: rel-weld Log Message:
mal_weld: replace a dense BAT with a non-dense BAT diffs (40 lines): diff --git a/monetdb5/modules/mal/mal_weld.c b/monetdb5/modules/mal/mal_weld.c --- a/monetdb5/modules/mal/mal_weld.c +++ b/monetdb5/modules/mal/mal_weld.c @@ -26,7 +26,6 @@ *(TYPE *)(*ADDR) = *(TYPE *)VALUE; /* set */ \ *ADDR += sizeof(TYPE); /* increase */ - void getOrSetStructMember(char **addr, int type, const void *value, int op) { if (type == TYPE_bte) { getOrSetStructMemberImpl(addr, char, value, op); @@ -138,6 +137,19 @@ static long getTimeNowMs(void) { return (long)timecheck.tv_sec * 1000 + (long)timecheck.tv_usec / 1000; } +static BAT* +BATundense(BAT *b) { + /* A dense BAT should always be of TYPE_oid ? */ + BAT *newb = COLnew(b->hseqbase, TYPE_oid, BATcount(b), TRANSIENT); + oid *base = (oid*)Tloc(newb, 0); + for (oid i = b->tseqbase; i < b->tseqbase + BATcount(b); i++) { + *base = i; + base++; + } + BATsetcount(newb, BATcount(b)); + return newb; +} + str WeldRun(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { @@ -204,7 +216,7 @@ WeldRun(Client cntxt, MalBlkPtr mb, MalS BAT *b = BATdescriptor(bid); if (b == NULL) throw(MAL, "weld.run", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING": %d", getArg(pci, i)); if (BATtdense(b)) { - fprintf(stderr, "bat is dense: %d\n", getArg(pci, i)); + b = BATundense(b); } getOrSetStructMember(&inputPtr, TYPE_ptr, &b->theap.base, OP_SET); getOrSetStructMember(&inputPtr, TYPE_lng, &b->batCount, OP_SET); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list