#ident "Copyright (c) 2007-2010 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
// Following data structures are the unpacked format of a leafentry.
// * ule is the unpacked leaf entry, that contains an array of unpacked
// transaction records
// * uxr is the unpacked transaction record
//
//Types of transaction records.
enum{XR_INSERT=1,
XR_DELETE=2,
XR_PLACEHOLDER=3};
typedefstructuxr{// unpacked transaction record
uint8_ttype;// delete/insert/placeholder
uint32_tvallen;// number of bytes in value
void*valp;// pointer to value (Where is value really stored?)
TXNIDxid;// transaction id
// Note: when packing ule into a new leafentry, will need
// to copy actual data from valp to new leafentry
}UXR_S,*UXR;
// Unpacked Leaf Entry is of fixed size because it's just on the
// stack and we care about ease of access more than the memory footprint.
typedefstructule{// unpacked leaf entry
uint32_tnum_puxrs;// how many of uxrs[] are provisional
uint32_tnum_cuxrs;// how many of uxrs[] are committed
uint32_tkeylen;
void*keyp;
UXR_Suxrs_static[MAX_TRANSACTION_RECORDS*2];// uxrs[0] is oldest committed (txn commit time, not txn start time), uxrs[num_cuxrs] is outermost provisional value (if any exist/num_puxrs > 0)
UXRuxrs;//If num_cuxrs < MAX_TRANSACTION_RECORDS then &uxrs_static[0].
//Otherwise we use a dynamically allocated array of size num_cuxrs + 1 + MAX_TRANSATION_RECORD.