int PX_get_record2(pxdoc_t *pxdoc, int recno, char *data, int *deleted, pxdatablockinfo_t *pxdbinfo)
This function is similar to PX_get_record(3) but takes two extra parameters. If *deleted is set to 1 the function will consider any record in the database, even those which are deleted. If *pxdbinfo is not NULL, the function will return some information about the data block where the record has been read from. You will have to allocate memory for pxdbinfo before calling PX_get_record2.
On return *deleted will be set to 1 if the requested record is deleted or 0 if it is not deleted. The struct pxdatablockinfo_t has the following fields:
- blockpos (long)
File positon where the block starts. The first six bytes
of the block contain the header, followed by the record data.
- recordpos (long)
- File position where the requested record starts.
- size (int)
Size of the data block without the six bytes for the header.
- recno (int)
- Record number within the data block. The first record in the block has number 0.
- numrecords (int)
- The number of records in this block.
- number (int)
- The number of the data block.
This function may return records with invalid data, because records are not explizitly marked as deleted, but rather the size of a valid data block is modified. A data block is a fixed size area in the file which holds a certain number of records. If for some reason a data block has newer been completely filled with records, the algorithmn anticipates deleted records in this data block, which are not there. This often happens with the last data block in a file, which is likely to not being fully filled with records.
If you accessing several records, do it in ascending order, because this is the most efficient way.
This function is deprecated. Use PX_retrieve_record(3) instead
Returns 0 on success and -1 on failure.
This manual page was written by Uwe Steinmann [email protected]