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

Db::join





#include <db_cxx.h>

:int Db::join(Dbc **curslist, u_int32_t flags, Dbc **dbcp);





Description



FThe Db::join method 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 the<primary 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_DUPSORT flag to the DbInfo::set_flags method.



cThe 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 ofŠDbc objects. Each Dbc must have been initialized toDreference the key on which the underlying database should be joined.gTypically, this initialization is done by a Dbc::get call withJthe 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:

Z

Dbc::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.
"

Dbc::put
Returns EINVAL."

Dbc::del
Returns EINVAL.N

Dbc::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::join>method either returns errno or throws an exception that:encapsulates an errno on failure, and 0 on success.



Errors

OIf a fatal error occurs in Berkeley DB, the Db::join method may fail and eitherIreturn DB_RUNRECOVERY or throw an exception encapsulating DB_RUNRECOVERY,Gat which point all subsequent database calls will also fail in the sameFway. Methods marked as returning errno will, by default, throwHan exception that encapsulates the error information. The default error\behavior can be changed, see
DbException.

The Db::join&method may fail and throw an exceptionKfor 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&method may fail and throw an exceptionor return errnofor the following conditions:

B

EINVAL
An invalid flag value or parameter was specified.

7The c_put or c_del functions were called.





Class

,Db



See Also

4Db::close,6Db::cursor,0Db::del,.Db::fd,0Db::get,HDb::get_byteswapped,:Db::get_type, Db::join,2Db::open,0Db::put,1Db::statand2Db::sync.
ÿÿ