// Retrieve the value from a positioned cursor. RecordData WiredTigerRecordStore::_getData(const WiredTigerCursor& cursor) const { WT_ITEM value; int ret = cursor->get_value(cursor.get(), &value); invariantWTOK(ret); SharedBuffer data = SharedBuffer::allocate(value.size); memcpy(data.get(), value.data, value.size); return RecordData(data, value.size); }
bool TerarkDbRecordStore::findRecord(OperationContext* txn, const RecordId& id, RecordData* out) const { if (id.isNull()) return false; llong recIdx = id.repr() - 1; CompositeTable* tab = m_table->m_tab.get(); auto& td = m_table->getMyThreadData(); tab->getValue(recIdx, &td.m_buf, &*td.m_dbCtx); SharedBuffer bson = td.m_coder.decode(&tab->rowSchema(), td.m_buf); // size_t bufsize = sizeof(SharedBuffer::Holder) + bson.objsize(); int bufsize = ConstDataView(bson.get()).read<LittleEndian<int>>(); *out = RecordData(bson, bufsize); return true; }