/* * Accelerator Control */ str BKCsetHash(bit *ret, const bat *bid) { BAT *b; (void) ret; if ((b = BATdescriptor(*bid)) == NULL) { throw(MAL, "bat.setHash", RUNTIME_OBJECT_MISSING); } *ret = BAThash(b, 0) == GDK_SUCCEED; BBPunfix(b->batCacheid); return MAL_SUCCEED; }
/* returns table rids, for the given select ranges */ static rids * rids_select( sql_trans *tr, sql_column *key, const void *key_value_low, const void *key_value_high, ...) { va_list va; BAT *b = NULL, *r = NULL, *s = NULL; rids *rs = ZNEW(rids); const void *kvl = key_value_low, *kvh = key_value_high; /* if pointers are equal, make it an inclusive select */ bool hi = key_value_low == key_value_high; if(!rs) return NULL; s = delta_cands(tr, key->t); if (s == NULL) { GDKfree(rs); return NULL; } b = full_column(tr, key); if (b == NULL) { bat_destroy(s); GDKfree(rs); return NULL; } if (!kvl) kvl = ATOMnilptr(b->ttype); if (!kvh && kvl != ATOMnilptr(b->ttype)) kvh = ATOMnilptr(b->ttype); if (key_value_low) { BAThash(b); r = BATselect(b, s, kvl, kvh, true, hi, false); bat_destroy(s); s = r; } full_destroy(key, b); if (s == NULL) { GDKfree(rs); return NULL; } if (key_value_low || key_value_high) { va_start(va, key_value_high); while ((key = va_arg(va, sql_column *)) != NULL) { kvl = va_arg(va, void *); kvh = va_arg(va, void *); b = full_column(tr, key); if (!kvl) kvl = ATOMnilptr(b->ttype); if (!kvh && kvl != ATOMnilptr(b->ttype)) kvh = ATOMnilptr(b->ttype); assert(kvh); r = BATselect(b, s, kvl, kvh, true, hi, false); bat_destroy(s); s = r; full_destroy(key, b); if (s == NULL) { GDKfree(rs); va_end(va); return NULL; } } va_end(va); }