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 * Unreference a database instance.
43 * @param db rpm database
46 rpmdb rpmdbUnlink(rpmdb db);
49 * Reference a database instance.
50 * @param db rpm database
51 * @return new rpm database reference
53 rpmdb rpmdbLink(rpmdb db);
57 * @param prefix path to top of install tree
58 * @retval dbp address of rpm database
59 * @param mode open(2) flags: O_RDWR or O_RDONLY (O_CREAT also)
60 * @param perms database permissions
61 * @return 0 on success
63 int rpmdbOpen (const char * prefix, rpmdb * dbp,
67 * Initialize database.
68 * @param prefix path to top of install tree
69 * @param perms database permissions
70 * @return 0 on success
72 int rpmdbInit(const char * prefix, int perms);
75 * Verify database components.
76 * @param prefix path to top of install tree
77 * @return 0 on success
79 int rpmdbVerify(const char * prefix);
82 * Close all database indices and free rpmdb.
83 * @param db rpm database
84 * @return 0 on success
86 int rpmdbClose (rpmdb db);
89 * Sync all database indices.
90 * @param db rpm database
91 * @return 0 on success
93 int rpmdbSync (rpmdb db);
96 * Open all database indices.
97 * @param db rpm database
98 * @return 0 on success
100 int rpmdbOpenAll (rpmdb db);
103 * Return number of instances of package in rpm database.
104 * @param db rpm database
105 * @param name rpm package name
106 * @return number of instances
108 int rpmdbCountPackages(rpmdb db, const char * name);
111 * Return header join key for current position of rpm database iterator.
112 * @param mi rpm database iterator
113 * @return current header join key
115 unsigned int rpmdbGetIteratorOffset(rpmdbMatchIterator mi);
118 * Return number of elements in rpm database iterator.
119 * @param mi rpm database iterator
120 * @return number of elements
122 int rpmdbGetIteratorCount(rpmdbMatchIterator mi);
126 unsigned int rpmdbGetIteratorFileNum(rpmdbMatchIterator mi);
129 * Append items to set of package instances to iterate.
130 * @param mi rpm database iterator
131 * @param hdrNums array of package instances
132 * @param nHdrNums number of elements in array
133 * @return 0 on success, 1 on failure (bad args)
135 int rpmdbAppendIterator(rpmdbMatchIterator mi,
136 const int * hdrNums, int nHdrNums);
139 * Add pattern to iterator selector.
140 * @param mi rpm database iterator
142 * @param mode type of pattern match
143 * @param pattern pattern to match
144 * @return 0 on success
146 int rpmdbSetIteratorRE(rpmdbMatchIterator mi, rpmTag tag,
147 rpmMireMode mode, const char * pattern);
150 * Prepare iterator for lazy writes.
151 * @note Must be called before rpmdbNextIterator() with CDB model database.
152 * @param mi rpm database iterator
153 * @param rewrite new value of rewrite
154 * @return previous value
156 int rpmdbSetIteratorRewrite(rpmdbMatchIterator mi, int rewrite);
159 * Modify iterator to mark header for lazy write on release.
160 * @param mi rpm database iterator
161 * @param modified new value of modified
162 * @return previous value
164 int rpmdbSetIteratorModified(rpmdbMatchIterator mi, int modified);
167 * Modify iterator to verify retrieved header blobs.
168 * @param mi rpm database iterator
169 * @param ts transaction set
170 * @param (*hdrchk) headerCheck() vector
173 int rpmdbSetHdrChk(rpmdbMatchIterator mi, rpmts ts,
174 rpmRC (*hdrchk) (rpmts ts, const void * uh, size_t uc, char ** msg));
177 * Return database iterator.
178 * @param db rpm database
179 * @param rpmtag rpm tag
180 * @param keyp key data (NULL for sequential access)
181 * @param keylen key data length (0 will use strlen(keyp))
182 * @return NULL on failure
184 rpmdbMatchIterator rpmdbInitIterator(rpmdb db, rpmTag rpmtag,
185 const void * keyp, size_t keylen);
188 * Return next package header from iteration.
189 * @param mi rpm database iterator
190 * @return NULL on end of iteration.
192 Header rpmdbNextIterator(rpmdbMatchIterator mi);
195 * Check for and exit on termination signals.
197 int rpmdbCheckSignals(void);
200 * Check rpmdb signal handler for trapped signal and/or requested exit,
201 * clean up any open iterators and databases on termination condition.
202 * On non-zero exit any open references to rpmdb are invalid and cannot
203 * be accessed anymore, calling process should terminate immediately.
204 * @param terminate 0 to only check for signals, 1 to terminate anyway
205 * @return 0 to continue, 1 if termination cleanup was done.
207 int rpmdbCheckTerminate(int terminate);
210 * Destroy rpm database iterator.
211 * @param mi rpm database iterator
212 * @return NULL always
214 rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi);
217 * Rebuild database indices from package headers.
218 * @param prefix path to top of install tree
219 * @param ts transaction set (or NULL)
220 * @param (*hdrchk) headerCheck() vector (or NULL)
221 * @return 0 on success
223 int rpmdbRebuild(const char * prefix, rpmts ts,
224 rpmRC (*hdrchk) (rpmts ts, const void *uh, size_t uc, char ** msg));