csomh / source-git / rpm

Forked from source-git/rpm 4 years ago
Clone
2ff057
#ifndef H_RPMDB
2ff057
#define H_RPMDB
2ff057
2ff057
/** \ingroup rpmdb dbi
2ff057
 * \file lib/rpmdb.h
2ff057
 * RPM database API.
2ff057
 */
2ff057
2ff057
#include <rpm/rpmtypes.h>
2ff057
#include <rpm/rpmsw.h>
2ff057
2ff057
#ifdef __cplusplus
2ff057
extern "C" {
2ff057
#endif
2ff057
2ff057
/**
2ff057
 * Tag value pattern match mode.
2ff057
 */
2ff057
typedef enum rpmMireMode_e {
2ff057
    RPMMIRE_DEFAULT	= 0,	/*!< regex with \., .* and ^...$ added */
2ff057
    RPMMIRE_STRCMP	= 1,	/*!< strings  using strcmp(3) */
2ff057
    RPMMIRE_REGEX	= 2,	/*!< regex(7) patterns through regcomp(3) */
2ff057
    RPMMIRE_GLOB	= 3	/*!< glob(7) patterns through fnmatch(3) */
2ff057
} rpmMireMode;
2ff057
2ff057
typedef enum rpmdbOpX_e {
2ff057
    RPMDB_OP_DBGET              = 1,
2ff057
    RPMDB_OP_DBPUT              = 2,
2ff057
    RPMDB_OP_DBDEL              = 3,
2ff057
    RPMDB_OP_MAX		= 4
2ff057
} rpmdbOpX;
2ff057
2ff057
typedef enum rpmdbCtrlOp_e {
2ff057
    RPMDB_CTRL_LOCK_RO         = 1,
2ff057
    RPMDB_CTRL_UNLOCK_RO       = 2,
2ff057
    RPMDB_CTRL_LOCK_RW         = 3,
2ff057
    RPMDB_CTRL_UNLOCK_RW       = 4,
2ff057
    RPMDB_CTRL_INDEXSYNC       = 5
2ff057
} rpmdbCtrlOp;
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Retrieve operation timestamp from rpm database.
2ff057
 * @param db            rpm database
2ff057
 * @param opx           operation timestamp index
2ff057
 * @return              pointer to operation timestamp.
2ff057
 */
2ff057
rpmop rpmdbOp(rpmdb db, rpmdbOpX opx);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Open all database indices.
2ff057
 * @param db		rpm database
2ff057
 * @return		0 on success
2ff057
 */
2ff057
int rpmdbOpenAll (rpmdb db);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Return number of instances of package in rpm database.
2ff057
 * @param db		rpm database
2ff057
 * @param name		rpm package name
2ff057
 * @return		number of instances
2ff057
 */
2ff057
int rpmdbCountPackages(rpmdb db, const char * name);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Return header join key for current position of rpm database iterator.
2ff057
 * @param mi		rpm database iterator
2ff057
 * @return		current header join key
2ff057
 */
2ff057
unsigned int rpmdbGetIteratorOffset(rpmdbMatchIterator mi);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Return number of elements in rpm database iterator.
2ff057
 * @param mi		rpm database iterator
2ff057
 * @return		number of elements
2ff057
 */
2ff057
int rpmdbGetIteratorCount(rpmdbMatchIterator mi);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 */
2ff057
unsigned int rpmdbGetIteratorFileNum(rpmdbMatchIterator mi);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Append items to set of package instances to iterate.
2ff057
 * @param mi		rpm database iterator
2ff057
 * @param hdrNums	array of package instances
2ff057
 * @param nHdrNums	number of elements in array
2ff057
 * @return		0 on success, 1 on failure (bad args)
2ff057
 */
2ff057
int rpmdbAppendIterator(rpmdbMatchIterator mi,
2ff057
			const unsigned int * hdrNums, unsigned int nHdrNums);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Add pattern to iterator selector.
2ff057
 * @param mi		rpm database iterator
2ff057
 * @param tag		rpm tag
2ff057
 * @param mode		type of pattern match
2ff057
 * @param pattern	pattern to match
2ff057
 * @return		0 on success
2ff057
 */
2ff057
int rpmdbSetIteratorRE(rpmdbMatchIterator mi, rpmTagVal tag,
2ff057
		rpmMireMode mode, const char * pattern);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Prepare iterator for lazy writes.
2ff057
 * @note Must be called before rpmdbNextIterator() with CDB model database.
2ff057
 * @param mi		rpm database iterator
2ff057
 * @param rewrite	new value of rewrite
2ff057
 * @return		previous value
2ff057
 */
2ff057
int rpmdbSetIteratorRewrite(rpmdbMatchIterator mi, int rewrite);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Modify iterator to mark header for lazy write on release.
2ff057
 * @param mi		rpm database iterator
2ff057
 * @param modified	new value of modified
2ff057
 * @return		previous value
2ff057
 */
2ff057
int rpmdbSetIteratorModified(rpmdbMatchIterator mi, int modified);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Modify iterator to verify retrieved header blobs.
2ff057
 * @param mi		rpm database iterator
2ff057
 * @param ts		transaction set
2ff057
 * @param (*hdrchk)	headerCheck() vector
2ff057
 * @return		0 always
2ff057
 */
2ff057
int rpmdbSetHdrChk(rpmdbMatchIterator mi, rpmts ts,
2ff057
	rpmRC (*hdrchk) (rpmts ts, const void * uh, size_t uc, char ** msg));
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Return database iterator.
2ff057
 * @param db		rpm database
2ff057
 * @param rpmtag	database index tag
2ff057
 * @param keyp		key data (NULL for sequential access)
2ff057
 * @param keylen	key data length (0 will use strlen(keyp))
2ff057
 * @return		NULL on failure
2ff057
 */
2ff057
rpmdbMatchIterator rpmdbInitIterator(rpmdb db, rpmDbiTagVal rpmtag,
2ff057
			const void * keyp, size_t keylen);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Return next package header from iteration.
2ff057
 * @param mi		rpm database iterator
2ff057
 * @return		NULL on end of iteration.
2ff057
 */
2ff057
Header rpmdbNextIterator(rpmdbMatchIterator mi);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Destroy rpm database iterator.
2ff057
 * @param mi		rpm database iterator
2ff057
 * @return		NULL always
2ff057
 */
2ff057
rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Get an iterator for an index
2ff057
 * @param db		rpm database
2ff057
 * @param rpmtag	the index to iterate over
2ff057
 * @return		the index iterator
2ff057
 */
2ff057
rpmdbIndexIterator rpmdbIndexIteratorInit(rpmdb db, rpmDbiTag rpmtag);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Get the next key - Warning! Keys are not zero terminated!
2ff057
 * Binary tags may even contain zero bytes
2ff057
 * @param ii		index iterator
2ff057
 * @param key		address to save the pointer to the key
2ff057
 * @param keylen	address to save the length of the key to
2ff057
 * @return 		0 on success; != 0 on error or end of index
2ff057
 */
2ff057
int rpmdbIndexIteratorNext(rpmdbIndexIterator ii, const void ** key, size_t * keylen);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Get the next key into a tag data container.
2ff057
 * Caller is responsible for calling rpmtdFreeData() to freeing the
2ff057
 * data returned in keytd once done with it.
2ff057
 * @param ii		index iterator
2ff057
 * @param keytd		tag container to store the key in
2ff057
 * @return 		0 on success; != 0 on error or end of index
2ff057
 */
2ff057
int rpmdbIndexIteratorNextTd(rpmdbIndexIterator ii, rpmtd keytd);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Get number of entries for current key
2ff057
 * @param ii            index iterator
2ff057
 * @return		number of entries. 0 on error.
2ff057
 */
2ff057
unsigned int rpmdbIndexIteratorNumPkgs(rpmdbIndexIterator ii);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Get package offset of entry
2ff057
 * @param ii            index iterator
2ff057
 * @param nr		number of the entry
2ff057
 * @return		db offset of pkg
2ff057
 */
2ff057
unsigned int rpmdbIndexIteratorPkgOffset(rpmdbIndexIterator ii, unsigned int nr);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Get tag number of entry
2ff057
 * @param ii            index iterator
2ff057
 * @param nr		number of the entry
2ff057
 * @return		number of tag within the package
2ff057
 */
2ff057
unsigned int rpmdbIndexIteratorTagNum(rpmdbIndexIterator ii, unsigned int nr);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * Free index iterator
2ff057
 * @param ii            index iterator
2ff057
 * return 		NULL
2ff057
 */
2ff057
rpmdbIndexIterator rpmdbIndexIteratorFree(rpmdbIndexIterator ii);
2ff057
2ff057
/** \ingroup rpmdb
2ff057
 * manipulate the rpm database
2ff057
 * @param db		rpm database
2ff057
 * @param ctrl		operation
2ff057
 * @return 		0 on success; != 0 on error
2ff057
 */
2ff057
int rpmdbCtrl(rpmdb db, rpmdbCtrlOp ctrl);
2ff057
2ff057
#ifdef __cplusplus
2ff057
}
2ff057
#endif
2ff057
2ff057
#endif	/* H_RPMDB */