static void * column_find_value(sql_trans *tr, sql_column *c, oid rid) { BUN q; BAT *b, *d = NULL; void *res = NULL; sql_dbat *bat = c->t->data; if (bat->dbid) d = store_funcs.bind_del(tr, c->t, RDONLY); b = full_column(c, d, NULL); if (d) bat_destroy(d); q = BUNfnd(b, (ptr) &rid); if (q != BUN_NONE) { BATiter bi = bat_iterator(b); void *r; int sz; res = BUNtail(bi, q); sz = ATOMlen(b->ttype, res); r = GDKzalloc(sz); memcpy(r,res,sz); res = r; } bat_destroy(b); return res; }
char * GDKgetenv(const char *name) { BUN b = BUNfnd(BATmirror(GDKkey), (ptr) name); if (b != BUN_NONE) { BATiter GDKenvi = bat_iterator(GDKval); return BUNtail(GDKenvi, b); } return NULL; }
static int monet5_find_user(ptr mp, str user) { BAT *uid, *nme; BUN p; mvc *m = (mvc *) mp; Client c = MCgetClient(m->clientid); str err; if ((err = AUTHgetUsers(&uid, &nme, c)) != MAL_SUCCEED) { _DELETE(err); return -1; } p = BUNfnd(nme, user); BBPunfix(uid->batCacheid); BBPunfix(nme->batCacheid); /* yeah, I would prefer to return something different too */ return (p == BUN_NONE ? -1 : 1); }
static oid column_find_row(sql_trans *tr, sql_column *c, void *value, ...) { va_list va; BUN q; BAT *b = NULL, *s = NULL, *r = NULL, *d = NULL; oid rid = oid_nil; sql_column *nc; void *nv; sql_dbat *bat = c->t->data; if (bat->dbid) d = store_funcs.bind_del(tr, c->t, RDONLY); va_start(va, value); while ((nc = va_arg(va, sql_column *)) != NULL) { nv = va_arg(va, void *); b = full_column(c, d, s); if (s) bat_destroy(s); s = BATselect(b, value, value); bat_destroy(b); c = nc; value = nv; } va_end(va); b = full_column(c, d, s); if (s) bat_destroy(s); if (d) bat_destroy(d); r = BATmirror(b); q = BUNfnd(r, value); if (q != BUN_NONE) { BATiter ri = bat_iterator(r); rid = *(oid *) BUNtail(ri, q); } bat_destroy(b); return rid; }
void QOTupdateStatistics(str nme, int actions, lng val) { BATiter bi; BUN p; oid idx; int ival=0, *ip= &ival; lng lval=0, *lp= &lval; QOTstatisticsInit(); MT_lock_set(&qotlock, "QOT statistics"); p = BUNfnd(BATmirror(qotStat[QOTnames]),(ptr)nme); if (p == BUN_NONE) { BUNappend(qotStat[QOTnames], nme, FALSE); BUNappend(qotStat[QOTcalls], &ival, FALSE); BUNappend(qotStat[QOTactions], &ival, FALSE); BUNappend(qotStat[QOTtimings], &lval, FALSE); p = BUNfnd(BATmirror(qotStat[QOTnames]),(ptr)nme); if (p == BUN_NONE){ MT_lock_unset(&qotlock, "QOT statistics"); return; } } bi = bat_iterator(qotStat[QOTnames]); idx = *(oid*) BUNhead(bi,p); p = BUNfnd(qotStat[QOTcalls],&idx); if (p == BUN_NONE) { #ifdef _Q_STATISTICS_DEBUG mnstr_printf(GDKout,"#Could not access 'calls'\n"); #endif MT_lock_unset(&qotlock, "QOT statistics"); return; } bi = bat_iterator(qotStat[QOTcalls]); ip = (int*) BUNtail(bi,p); *ip = *ip+1; bi.b->tsorted = bi.b->trevsorted = 0; bi.b->tkey = 0; p = BUNfnd(qotStat[QOTactions],&idx); if (p == BUN_NONE){ #ifdef _Q_STATISTICS_DEBUG mnstr_printf(GDKout,"#Could not access 'actions'\n"); #endif MT_lock_unset(&qotlock, "QOT statistics"); return; } bi = bat_iterator(qotStat[QOTactions]); ip = (int*) BUNtail(bi,p); *ip = *ip+ actions; bi.b->tsorted = bi.b->trevsorted = 0; bi.b->tkey = 0; p = BUNfnd(qotStat[QOTtimings],&idx); if (p == BUN_NONE){ #ifdef _Q_STATISTICS_DEBUG mnstr_printf(GDKout, "#Could not access 'timings'\n"); #endif MT_lock_unset(&qotlock, "QOT statistics"); return ; } bi = bat_iterator(qotStat[QOTtimings]); lp = (lng*) BUNtail(bi,p); *lp = *lp+ val; bi.b->tsorted = bi.b->trevsorted = 0; bi.b->tkey = 0; MT_lock_unset(&qotlock, "QOT statistics"); }