static const byte * blkNext(block_t * b) { genericBlockImpl * impl = (genericBlockImpl*)b->impl; impl->pos = stasis_record_next(-1, impl->p, impl->pos); if(! memcmp(&(impl->pos), &NULLRID, sizeof(recordid))) { return 0; } else { return stasis_record_read_begin(-1, impl->p, impl->pos); } }
/** @todo The block API should pass around xids. */ static const byte * blkFirst(block_t * b) { genericBlockImpl * impl = b->impl; impl->pos = stasis_record_first(-1, impl->p); if(! memcmp(&(impl->pos), &(NULLRID), sizeof(recordid))) { return 0; } else { return stasis_record_read_begin(-1, impl->p, impl->pos); } }
int stasis_record_read(int xid, Page * p, recordid rid, byte *buf) { assert(rid.page == p->id); assert(rid.size <= BLOB_THRESHOLD_SIZE); const byte * dat = stasis_record_read_begin(xid,p,rid); memcpy(buf, dat, stasis_record_length_read(xid,p,rid)); stasis_record_read_done(xid,p,rid,dat); return 0; }