4 /** \ingroup rpmdb dbi db1 db3
6 * Access RPM indices using Berkeley DB interface(s).
9 #include <rpm/rpmtypes.h>
10 #include <rpm/rpmsw.h>
16 extern int _rpmdb_debug;
19 * Tag value pattern match mode.
21 typedef enum rpmMireMode_e {
22 RPMMIRE_DEFAULT = 0, /*!< regex with \., .* and ^...$ added */
23 RPMMIRE_STRCMP = 1, /*!< strings using strcmp(3) */
24 RPMMIRE_REGEX = 2, /*!< regex(7) patterns through regcomp(3) */
25 RPMMIRE_GLOB = 3 /*!< glob(7) patterns through fnmatch(3) */
28 typedef enum rpmdbOpX_e {
36 * Retrieve operation timestamp from rpm database.
37 * @param db rpm database
38 * @param opx operation timestamp index
39 * @return pointer to operation timestamp.
41 rpmop rpmdbOp(rpmdb db, rpmdbOpX opx);
44 * Set chrootDone flag, i.e. has chroot(2) been performed?
45 * @param db rpm database
46 * @param chrootDone new chrootDone flag
47 * @return previous chrootDone flag
49 int rpmdbSetChrootDone(rpmdb db, int chrootDone);
52 * Unreference a database instance.
53 * @param db rpm database
57 rpmdb rpmdbUnlink (rpmdb db, const char * msg);
60 * Reference a database instance.
61 * @param db rpm database
63 * @return new rpm database reference
65 rpmdb rpmdbLink (rpmdb db, const char * msg);
69 * @param prefix path to top of install tree
70 * @retval dbp address of rpm database
71 * @param mode open(2) flags: O_RDWR or O_RDONLY (O_CREAT also)
72 * @param perms database permissions
73 * @return 0 on success
75 int rpmdbOpen (const char * prefix, rpmdb * dbp,
79 * Initialize database.
80 * @param prefix path to top of install tree
81 * @param perms database permissions
82 * @return 0 on success
84 int rpmdbInit(const char * prefix, int perms);
87 * Verify database components.
88 * @param prefix path to top of install tree
89 * @return 0 on success
91 int rpmdbVerify(const char * prefix);
94 * Close a single database index.
95 * @param db rpm database
96 * @param rpmtag rpm tag
97 * @return 0 on success
99 int rpmdbCloseDBI(rpmdb db, rpmTag rpmtag);
102 * Close all database indices and free rpmdb.
103 * @param db rpm database
104 * @return 0 on success
106 int rpmdbClose (rpmdb db);
109 * Sync all database indices.
110 * @param db rpm database
111 * @return 0 on success
113 int rpmdbSync (rpmdb db);
116 * Open all database indices.
117 * @param db rpm database
118 * @return 0 on success
120 int rpmdbOpenAll (rpmdb db);
123 * Return number of instances of package in rpm database.
124 * @param db rpm database
125 * @param name rpm package name
126 * @return number of instances
128 int rpmdbCountPackages(rpmdb db, const char * name);
131 * Return header join key for current position of rpm database iterator.
132 * @param mi rpm database iterator
133 * @return current header join key
135 unsigned int rpmdbGetIteratorOffset(rpmdbMatchIterator mi);
138 * Return number of elements in rpm database iterator.
139 * @param mi rpm database iterator
140 * @return number of elements
142 int rpmdbGetIteratorCount(rpmdbMatchIterator mi);
146 unsigned int rpmdbGetIteratorFileNum(rpmdbMatchIterator mi);
149 * Append items to set of package instances to iterate.
150 * @param mi rpm database iterator
151 * @param hdrNums array of package instances
152 * @param nHdrNums number of elements in array
153 * @return 0 on success, 1 on failure (bad args)
155 int rpmdbAppendIterator(rpmdbMatchIterator mi,
156 const int * hdrNums, int nHdrNums);
159 * Remove items from set of package instances to iterate.
160 * @note Sorted hdrNums are always passed in rpmlib.
161 * @param mi rpm database iterator
162 * @param hdrNums array of package instances
163 * @param nHdrNums number of elements in array
164 * @param sorted is the array sorted? (array will be sorted on return)
165 * @return 0 on success, 1 on failure (bad args)
167 int rpmdbPruneIterator(rpmdbMatchIterator mi,
168 int * hdrNums, int nHdrNums, int sorted);
171 * Add pattern to iterator selector.
172 * @param mi rpm database iterator
174 * @param mode type of pattern match
175 * @param pattern pattern to match
176 * @return 0 on success
178 int rpmdbSetIteratorRE(rpmdbMatchIterator mi, rpmTag tag,
179 rpmMireMode mode, const char * pattern);
182 * Prepare iterator for lazy writes.
183 * @note Must be called before rpmdbNextIterator() with CDB model database.
184 * @param mi rpm database iterator
185 * @param rewrite new value of rewrite
186 * @return previous value
188 int rpmdbSetIteratorRewrite(rpmdbMatchIterator mi, int rewrite);
191 * Modify iterator to mark header for lazy write on release.
192 * @param mi rpm database iterator
193 * @param modified new value of modified
194 * @return previous value
196 int rpmdbSetIteratorModified(rpmdbMatchIterator mi, int modified);
199 * Modify iterator to verify retrieved header blobs.
200 * @param mi rpm database iterator
201 * @param ts transaction set
202 * @param (*hdrchk) headerCheck() vector
205 int rpmdbSetHdrChk(rpmdbMatchIterator mi, rpmts ts,
206 rpmRC (*hdrchk) (rpmts ts, const void * uh, size_t uc, char ** msg));
209 * Return database iterator.
210 * @param db rpm database
211 * @param rpmtag rpm tag
212 * @param keyp key data (NULL for sequential access)
213 * @param keylen key data length (0 will use strlen(keyp))
214 * @return NULL on failure
216 rpmdbMatchIterator rpmdbInitIterator(rpmdb db, rpmTag rpmtag,
217 const void * keyp, size_t keylen);
220 * Return next package header from iteration.
221 * @param mi rpm database iterator
222 * @return NULL on end of iteration.
224 Header rpmdbNextIterator(rpmdbMatchIterator mi);
227 * Check for and exit on termination signals.
229 int rpmdbCheckSignals(void);
232 * Check rpmdb signal handler for trapped signal and/or requested exit,
233 * clean up any open iterators and databases on termination condition.
234 * On non-zero exit any open references to rpmdb are invalid and cannot
235 * be accessed anymore, calling process should terminate immediately.
236 * @param terminate 0 to only check for signals, 1 to terminate anyway
237 * @return 0 to continue, 1 if termination cleanup was done.
239 int rpmdbCheckTerminate(int terminate);
242 * Destroy rpm database iterator.
243 * @param mi rpm database iterator
244 * @return NULL always
246 rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi);
249 * Add package header to rpm database and indices.
250 * @param db rpm database
251 * @param iid install transaction id (iid = 0 or -1 to skip)
253 * @param ts (unused) transaction set (or NULL)
254 * @param (*hdrchk) (unused) headerCheck() vector (or NULL)
255 * @return 0 on success
257 int rpmdbAdd(rpmdb db, int iid, Header h, rpmts ts,
258 rpmRC (*hdrchk) (rpmts ts, const void *uh, size_t uc, char ** msg));
261 * Remove package header from rpm database and indices.
262 * @param db rpm database
263 * @param rid (unused) remove transaction id (rid = 0 or -1 to skip)
264 * @param hdrNum package instance number in database
265 * @param ts (unused) transaction set (or NULL)
266 * @param (*hdrchk) (unused) headerCheck() vector (or NULL)
267 * @return 0 on success
269 int rpmdbRemove(rpmdb db, int rid, unsigned int hdrNum,
271 rpmRC (*hdrchk) (rpmts ts, const void *uh, size_t uc, char ** msg));
274 * Rebuild database indices from package headers.
275 * @param prefix path to top of install tree
276 * @param ts transaction set (or NULL)
277 * @param (*hdrchk) headerCheck() vector (or NULL)
278 * @return 0 on success
280 int rpmdbRebuild(const char * prefix, rpmts ts,
281 rpmRC (*hdrchk) (rpmts ts, const void *uh, size_t uc, char ** msg));