static void pseudo(bat *ret, BAT *b, str X1,str X2) { char buf[BUFSIZ]; snprintf(buf,BUFSIZ,"%s_%s", X1,X2); if (BBPindex(buf) <= 0) BATname(b,buf); BATroles(b,X1,X2); BATmode(b,TRANSIENT); BATfakeCommit(b); *ret = b->batCacheid; BBPkeepref(*ret); }
str CMDbbpbind(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { str name; ValPtr lhs; bat i; int ht,tt; BAT *b; (void) cntxt; (void) mb; /* fool compiler */ lhs = &stk->stk[pci->argv[0]]; name = *getArgReference_str(stk, pci, 1); if (isIdentifier(name) < 0) throw(MAL, "bbp.bind", IDENTIFIER_EXPECTED); i = BBPindex(name); if (i == 0) throw(MAL, "bbp.bind", RUNTIME_OBJECT_MISSING); /* make sure you load the descriptors and heaps */ b = (BAT *) BATdescriptor(i); if (b == 0) /* Simple ignore the binding if you can't find the bat */ throw(MAL, "bbp.bind", RUNTIME_OBJECT_MISSING); /* check conformity of the actual type and the one requested */ ht= getHeadType(getArgType(mb,pci,0)); tt= getColumnType(getArgType(mb,pci,0)); if( b->htype == TYPE_void && ht== TYPE_oid) ht= TYPE_void; if( b->ttype == TYPE_void && tt== TYPE_oid) tt= TYPE_void; if( ht != b->htype || tt != b->ttype){ BBPunfix(i); throw(MAL, "bbp.bind", SEMANTIC_TYPE_MISMATCH ); } /* make sure we are not dealing with an about to be deleted bat */ if( BBP_refs(b->batCacheid) == 1 && BBP_lrefs(b->batCacheid) == 0){ BBPunfix(i); throw(MAL, "bbp.bind", RUNTIME_OBJECT_MISSING); } BBPkeepref(b->batCacheid); lhs->vtype = TYPE_bat; lhs->val.bval = i; return MAL_SUCCEED; }
static int CMDsave(bit *res, const char *input) { bat bid = BBPindex(input); BAT *b; *res = FALSE; if (bid) { BBPfix(bid); b = BBP_cache(bid); if (b && BATdirty(b)) { if (BBPsave(b) == GDK_SUCCEED) *res = TRUE; } BBPunfix(bid); } return GDK_SUCCEED; }
static BAT * QOT_create(str hnme, str tnme, int tt) { BAT *b; char buf[128]; snprintf(buf, 128, "stat_%s_%s", hnme, tnme); b = BATdescriptor(BBPindex(buf)); if (b) return b; b = BATnew(TYPE_void, tt, 256, PERSISTENT); if (b == NULL) return NULL; BATkey(b, TRUE); BBPrename(b->batCacheid, buf); BATmode(b, PERSISTENT); return b; }
ssize_t batFromStr(const char *src, size_t *len, bat **dst, bool external) { char *s; const char *t, *r = src; int c; bat bid = 0; atommem(sizeof(bat)); if (GDK_STRNIL(src)) { **dst = bat_nil; return 1; } while (GDKisspace(*r)) r++; if (external && strcmp(r, "nil") == 0) { **dst = bat_nil; return (ssize_t) (r - src) + 3; } if (*r == '<') r++; t = r; while ((c = *t) && (c == '_' || GDKisalnum(c))) t++; s = GDKstrndup(r, t - r); if (s == NULL) return -1; bid = BBPindex(s); GDKfree(s); **dst = bid == 0 ? bat_nil : bid; return (ssize_t) (t + (c == '>') - src); }
gdk_return TMsubcommit(BAT *b) { int cnt = 1; gdk_return ret = GDK_FAIL; bat *subcommit; BUN p, q; BATiter bi = bat_iterator(b); subcommit = (bat *) GDKmalloc((BATcount(b) + 1) * sizeof(bat)); if (subcommit == NULL) return GDK_FAIL; subcommit[0] = 0; /* BBP artifact: slot 0 in the array will be ignored */ /* collect the list and save the new bats outside any * locking */ BATloop(b, p, q) { bat bid = BBPindex((str) BUNtail(bi, p)); if (bid < 0) bid = -bid; if (bid) subcommit[cnt++] = bid; }