3.1.5.2.11 Receiving a CPMCompareBmkIn Request
When the server receives a CPMCompareBmkIn message request from the client, the server MUST do the following:
Check whether the client has a query associated with it. If this is not the case, the server MUST report a STATUS_INVALID_PARAMETER (0xC000000D) error.
Check whether the cursor handle, chapter handle, and bookmark handle passed are in corresponding lists. If this is not the case, the server MUST report an E_FAIL (0x80004005) error.
Prepare a CPMCompareBmkOut message.
If bookmark handles are equal, _dwComparison MUST be set to DBCOMPARE_EQ.
Otherwise, the server MUST do the following:
Find rows that are referred to by each bookmark handle in the query results. If the server cannot find one of the rows, DB_E_BADBOOKMARK (0x80040E0E) is returned.
If any one of the rows is not in the chapter indicated by the chapter handle in CPMCompareBmkIn, then _dwComparison MUST be set to DBCOMPARE_NOTCOMPARABLE.
Otherwise, when both rows are in the same chapter, the server MUST approximate a position of those rows in the rowset referred to by this chapter's handle. The server MUST then compare position values and set _dwComparison to DBCOMPARE_LT if the position of the first row is smaller than the position of the second row; otherwise, _dwComparison MUST be set to DBCOMPARE_GT.
Respond to the client with filled CPMCompareBmkOut message.