6 * Access RPM indices using Berkeley DB interface(s).
9 #include <rpm/rpmtypes.h>
10 #include <rpm/rpmsw.h>
17 * Tag value pattern match mode.
19 typedef enum rpmMireMode_e {
20 RPMMIRE_DEFAULT = 0, /*!< regex with \., .* and ^...$ added */
21 RPMMIRE_STRCMP = 1, /*!< strings using strcmp(3) */
22 RPMMIRE_REGEX = 2, /*!< regex(7) patterns through regcomp(3) */
23 RPMMIRE_GLOB = 3 /*!< glob(7) patterns through fnmatch(3) */
26 typedef enum rpmdbOpX_e {
34 * Retrieve operation timestamp from rpm database.
35 * @param db rpm database
36 * @param opx operation timestamp index
37 * @return pointer to operation timestamp.
39 rpmop rpmdbOp(rpmdb db, rpmdbOpX opx);
42 * Open all database indices.
43 * @param db rpm database
44 * @return 0 on success
46 int rpmdbOpenAll (rpmdb db);
49 * Return number of instances of package in rpm database.
50 * @param db rpm database
51 * @param name rpm package name
52 * @return number of instances
54 int rpmdbCountPackages(rpmdb db, const char * name);
57 * Return header join key for current position of rpm database iterator.
58 * @param mi rpm database iterator
59 * @return current header join key
61 unsigned int rpmdbGetIteratorOffset(rpmdbMatchIterator mi);
64 * Return number of elements in rpm database iterator.
65 * @param mi rpm database iterator
66 * @return number of elements
68 int rpmdbGetIteratorCount(rpmdbMatchIterator mi);
72 unsigned int rpmdbGetIteratorFileNum(rpmdbMatchIterator mi);
75 * Append items to set of package instances to iterate.
76 * @param mi rpm database iterator
77 * @param hdrNums array of package instances
78 * @param nHdrNums number of elements in array
79 * @return 0 on success, 1 on failure (bad args)
81 int rpmdbAppendIterator(rpmdbMatchIterator mi,
82 const int * hdrNums, int nHdrNums);
85 * Add pattern to iterator selector.
86 * @param mi rpm database iterator
88 * @param mode type of pattern match
89 * @param pattern pattern to match
90 * @return 0 on success
92 int rpmdbSetIteratorRE(rpmdbMatchIterator mi, rpmTagVal tag,
93 rpmMireMode mode, const char * pattern);
96 * Prepare iterator for lazy writes.
97 * @note Must be called before rpmdbNextIterator() with CDB model database.
98 * @param mi rpm database iterator
99 * @param rewrite new value of rewrite
100 * @return previous value
102 int rpmdbSetIteratorRewrite(rpmdbMatchIterator mi, int rewrite);
105 * Modify iterator to mark header for lazy write on release.
106 * @param mi rpm database iterator
107 * @param modified new value of modified
108 * @return previous value
110 int rpmdbSetIteratorModified(rpmdbMatchIterator mi, int modified);
113 * Modify iterator to verify retrieved header blobs.
114 * @param mi rpm database iterator
115 * @param ts transaction set
116 * @param (*hdrchk) headerCheck() vector
119 int rpmdbSetHdrChk(rpmdbMatchIterator mi, rpmts ts,
120 rpmRC (*hdrchk) (rpmts ts, const void * uh, size_t uc, char ** msg));
123 * Return database iterator.
124 * @param db rpm database
125 * @param rpmtag database index tag
126 * @param keyp key data (NULL for sequential access)
127 * @param keylen key data length (0 will use strlen(keyp))
128 * @return NULL on failure
130 rpmdbMatchIterator rpmdbInitIterator(rpmdb db, rpmDbiTagVal rpmtag,
131 const void * keyp, size_t keylen);
134 * Return next package header from iteration.
135 * @param mi rpm database iterator
136 * @return NULL on end of iteration.
138 Header rpmdbNextIterator(rpmdbMatchIterator mi);
141 * Check for and exit on termination signals.
143 int rpmdbCheckSignals(void);
146 * Check rpmdb signal handler for trapped signal and/or requested exit,
147 * clean up any open iterators and databases on termination condition.
148 * On non-zero exit any open references to rpmdb are invalid and cannot
149 * be accessed anymore, calling process should terminate immediately.
150 * @param terminate 0 to only check for signals, 1 to terminate anyway
151 * @return 0 to continue, 1 if termination cleanup was done.
153 int rpmdbCheckTerminate(int terminate);
156 * Destroy rpm database iterator.
157 * @param mi rpm database iterator
158 * @return NULL always
160 rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi);
163 * Get an iterator for an index
164 * @param db rpm database
165 * @param rpmtag the index to iterate over
166 * @return the index iterator
168 rpmdbIndexIterator rpmdbIndexIteratorInit(rpmdb db, rpmDbiTag rpmtag);
171 * Get the next key - Warning! Keys are not zero terminated!
172 * Binary tags may even contain zero bytes
173 * @param ii index iterator
174 * @param key adress to save the pointer to the key
175 * @param keylen adress to save the length of the key to
176 * @return 0 on success; != 0 on error or end of index
178 int rpmdbIndexIteratorNext(rpmdbIndexIterator ii, const void ** key, size_t * keylen);
181 * Get number of entries for current key
182 * @param ii index iterator
183 * @return number of entries. 0 on error.
185 unsigned int rpmdbIndexIteratorNumPkgs(rpmdbIndexIterator ii);
188 * Get package offset of entry
189 * @param ii index iterator
190 * @param nr number of the entry
191 * @return db offset of pkg
193 unsigned int rpmdbIndexIteratorPkgOffset(rpmdbIndexIterator ii, unsigned int nr);
196 * Get tag number of entry
197 * @param ii index iterator
198 * @param nr number of the entry
199 * @return number of tag within the package
201 unsigned int rpmdbIndexIteratorTagNum(rpmdbIndexIterator ii, unsigned int nr);
204 * Free index iterator
205 * @param ii index iterator
208 rpmdbIndexIterator rpmdbIndexIteratorFree(rpmdbIndexIterator ii);