+I$Berkeley DB: Db->join[P

Db->join





#include <db.h>

intDB->join(DB *primary,. DBC **curslist, u_int32_t flags, DBC **dbcp);





Description



HThe Db->join function creates a specialized cursor for use in performingIjoins on secondary indices. Your data must be organized in the following*manner in order to take advantage of this:

    J

  1. The actual data should be stored in the database represented by theprimary DB handle.P

  2. Secondary indices should be stored in separate database files, whose keysDare the values of the secondary indices and whose data items are theIprimary keys corresponding to the records having the designated secondaryGkey value. It is acceptable (and expected) that there may be duplicate!entries in the secondary indices.CThese duplicate entries should be sorted. For more information see^the DB_INFO structure's DB_DUPSORT flag.


9The primary argument contains the DB handle of theDprimary database, which is keyed by the data values found in entriesin the curslist.

@The curslist argument contains a NULL terminated array of7DBC structures. Each DBC must have been initialized toDreference the key on which the underlying database should be joined.lTypically, this initialization is done by a DBcursor->c_get call withHthe DB_SET flag specified.

EThe flags parameter is currently unused, and must be set to 0.

FThe newly created cursor is returned in the memory location referencedby dbcp.

EThe returned cursor has the standard cursor functions, that behave asfollows:

a

DBcursor->c_get
Iterates over the values associated with the keys to which each item inFcurslist has been initialized. Any data value which appears inEall items specified by the curslist argument is then used as a?key into the primary, and the key/data pair found in theprimary is returned.

CThe flags parameter must be set to 0 or the following value:

X

DB_JOIN_ITEM
Do not use the data value found in all of the cursors as a lookupEkey for the primary, but simply return it in the key parameter/instead. The data parameter is left unchanged.


RIn addition, the following value may be set by logically OR'ing it into theflags parameter:

T

DB_RMW
Acquire write locks instead of read locks when doing the retrieval.BSetting this flag may decrease the likelihood of deadlock during aFread-modify-write cycle by immediately acquiring the write lock duringFthe read part of the cycle so that another thread of control acquiringGa read lock for the same item, in its own read-modify-write cycle, willnot result in deadlock.
)

DBcursor->c_put
Returns EINVAL.)

DBcursor->c_del
Returns EINVAL.U

DBcursor->c_close
Close the cursor and release all resources. (Closing the@cursors in curslist is the responsibility of the caller.)


DIn a transaction protected environment, all of the cursors listed inCcurslist must have been created within the same transaction.

The Db->joinHfunction returns the value of errno on failure, and 0 on success.



Errors

QIf a fatal error occurs in Berkeley DB, the Db->join function may fail and returnFDB_RUNRECOVERY, at which point all subsequent database calls will alsoreturn DB_RUNRECOVERY.

The Db->join)function may fail and return errnoKfor any of the errors specified for the following Berkeley DB and C library functions: fflush(3), fprintf(3),free(3), malloc(3), memset(3), vfprintf(3),and vsnprintf(3).

In addition, the Db->join)function may fail and return errnofor the following conditions:

B

EINVAL
An invalid flag value or parameter was specified.

7The c_put or c_del functions were called.





See Also

8
db_appexit,8db_appinit,8db_version,2DB->close,4DB->cursor,.DB->del,,DB->fd,.DB->get, Db->join,/db_open,.DB->put,0DB->stat,0DB->sync,;DBcursor->c_close,7DBcursor->c_del,6DBcursor->c_getand7DBcursor->c_put.
ÿÿ