16 #if defined(_RPMDB_INTERNAL) 24 #if defined(_RPMDB_INTERNAL) 39 typedef struct rpmdb_s *
rpmdb;
60 #if defined(_RPMDB_INTERNAL) 69 struct _dbiIndexItem {
79 struct _dbiIndexItem *
recs;
87 const char * dbv_version;
108 int (*close) (
dbiIndex dbi,
unsigned int flags)
118 int (*sync) (
dbiIndex dbi,
unsigned int flags)
131 int (*callback) (
DB *,
const DBT *,
const DBT *, DBT *),
145 int (*callback) (DB *,
const DBT *, DBT *,
const DBT *,
int *),
170 int (*exists) (
dbiIndex dbi, DBT * key,
unsigned int flags)
181 int (*seqno) (
dbiIndex dbi, int64_t * seqnop,
unsigned int flags)
194 DBC ** dbcp,
unsigned int dbiflags)
205 int (*cclose) (
dbiIndex dbi,
DBC * dbcursor,
unsigned int flags)
231 int (*cdel) (
dbiIndex dbi,
DBC * dbcursor, DBT * key, DBT * data,
245 int (*cget) (
dbiIndex dbi,
DBC * dbcursor, DBT * key, DBT * data,
261 DBT * key, DBT * pkey, DBT * data,
unsigned int flags)
274 int (*cput) (
dbiIndex dbi,
DBC * dbcursor, DBT * key, DBT * data,
288 unsigned int * countp,
308 int (*stat) (
dbiIndex dbi,
unsigned int flags)
319 const char * dbi_root;
321 const char * dbi_home;
323 const char * dbi_file;
325 const char * dbi_subfile;
327 const char * dbi_tmpdir;
353 unsigned long dbi_cl_timeout;
354 unsigned long dbi_sv_timeout;
360 void (*db_errcall) (
void * dbenv,
const char *db_errpfx,
char *buffer)
365 const char * dbi_errpfx;
367 unsigned int dbi_thread_count;
376 const char * dbi_seq_id;
377 unsigned int dbi_seq_cachesize;
378 unsigned int dbi_seq_flags;
379 int64_t dbi_seq_initial;
386 int (*dbi_tx_recover) (
DB_ENV *dbenv,
DBT *log_rec,
387 DB_LSN *lsnp,
int redo,
void *info)
394 int dbi_heap_regionsize;
396 void * (*dbi_malloc) (
size_t nbytes)
399 unsigned int dbi_h_ffactor;
400 unsigned int (*dbi_h_hash_fcn) (
DB *,
const void *bytes,
403 unsigned int dbi_h_nelem;
404 unsigned int dbi_h_flags;
405 int (*dbi_h_dup_compare_fcn) (DB *,
const DBT *,
const DBT *)
410 int (*dbi_bt_compare_fcn) (DB *,
const DBT *,
const DBT *)
412 int (*dbi_bt_dup_compare_fcn) (DB *,
const DBT *,
const DBT *)
414 size_t (*dbi_bt_prefix_fcn) (DB *,
const DBT *,
const DBT *)
419 unsigned int dbi_re_len;
421 const char * dbi_re_source;
423 unsigned int dbi_q_extentsize;
426 const char * dbi_primary;
428 const char * dbi_foreign;
436 int dbi_table_exists;
448 const struct _dbiVec * dbi_vec;
459 const char * db_root;
461 const char * db_home;
467 const char * db_errpfx;
473 void (*db_errcall) (
const char * db_errpfx,
char * buffer)
478 void * (*db_malloc) (
size_t nbytes)
481 void * (*db_realloc) (
void * ptr,
size_t nbytes)
483 void (*db_free) (
void * ptr)
508 #if defined(__LCLINT__) 519 #if defined(_RPMDB_INTERNAL) 521 #if defined(WITH_DB) || defined(WITH_SQLITE) 542 #define db3Free(_dbi) \ 543 ((dbiIndex)rpmioFreePoolItem((rpmioItem)(_dbi), __FUNCTION__, __FILE__, __LINE__)) 553 extern const char * prDbiOpenFlags(
int dbflags,
int print_dbenv_flags)
591 DBC ** dbcp,
unsigned int flags)
595 return (*dbi->dbi_vec->copen) (dbi, txnid, dbcp, flags);
606 int dbiCclose(
dbiIndex dbi,
DBC * dbcursor,
unsigned int flags)
610 return (*dbi->dbi_vec->cclose) (dbi, dbcursor, flags);
626 return (*dbi->dbi_vec->cdup) (dbi, dbcursor, dbcp, flags);
646 assert(key->
data != NULL && key->
size > 0);
648 rc = (dbi->dbi_vec->cdel) (dbi, dbcursor, key, data, flags);
671 rc = (dbi->dbi_vec->cget) (dbi, dbcursor, key, data, flags);
688 DBT * key,
DBT * pkey,
DBT * data,
unsigned int flags)
695 rc = (dbi->dbi_vec->cpget) (dbi, dbcursor, key, pkey, data, flags);
717 assert(key->
data != NULL && key->
size > 0 && data->
data != NULL && data->
size > 0);
719 rc = (dbi->dbi_vec->cput) (dbi, dbcursor, key, data, flags);
733 int dbiCount(
dbiIndex dbi,
DBC * dbcursor,
unsigned int * countp,
738 return (*dbi->dbi_vec->ccount) (dbi, dbcursor, countp, flags);
748 int dbiClose(
dbiIndex dbi,
unsigned int flags)
752 return (*dbi->dbi_vec->close) (dbi, flags);
762 int dbiSync (
dbiIndex dbi,
unsigned int flags)
766 return (*dbi->dbi_vec->sync) (dbi, flags);
777 int dbiExists(
dbiIndex dbi,
DBT * key,
unsigned int flags)
781 return (*dbi->dbi_vec->exists) (dbi, key, flags);
792 int dbiSeqno(
dbiIndex dbi, int64_t * seqnop,
unsigned int flags)
796 return (*dbi->dbi_vec->seqno) (dbi, seqnop, flags);
809 int (*callback) (
DB *,
const DBT *,
const DBT *,
DBT *),
814 return (*dbi->dbi_vec->associate) (dbi, dbisecondary, callback, flags);
831 return (*dbi->dbi_vec->join) (dbi, curslist, dbcp, flags);
843 return (*dbi->dbi_vec->byteswapped) (dbi);
853 int dbiStat(
dbiIndex dbi,
unsigned int flags)
856 return (*dbi->dbi_vec->stat) (dbi, flags);
868 rpmdb rpmdb = (dbi ? dbi->dbi_rpmdb : NULL);
869 DB_TXN * _txn = (
DB_TXN*)(rpmdb ? rpmdb->db_txn : NULL);
873 #if defined(_RPMDB_INTERNAL) 875 #if !defined(__LCLINT__) 877 int rpmlkId(rpmdb rpmdb, uint32_t *_idp)
880 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080)
881 ? dbenv->lock_id(dbenv, _idp) : ENOTSUP;
883 fprintf(stderr,
"<-- %s(%p,%p) id 0x%x rc %d\n",
"dbenv->lock_id", dbenv, _idp, *_idp, rc);
888 int rpmlkIdFree(rpmdb rpmdb, uint32_t _id)
891 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080)
892 ? dbenv->lock_id_free(dbenv, _id) : ENOTSUP;
894 fprintf(stderr,
"<-- %s(%p,%u) rc %d\n",
"dbenv->lock_id_free", dbenv, (
unsigned)_id, rc);
899 int rpmlkGet(rpmdb rpmdb,
DBT * _object, uint32_t _lockmode,
void * _lock)
902 uint32_t _locker = 0x12344321;
904 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080)
905 ? dbenv->lock_get(dbenv, _locker, _flags, _object, (db_lockmode_t)_lockmode, (DB_LOCK*)_lock)
908 fprintf(stderr,
"<-- %s(%p,0x%x,0x%x,%p,0x%x,%p) rc %d\n",
"dbenv->lock_get", dbenv, _locker, _flags, _object, _lockmode, _lock, rc);
913 int rpmlkPut(rpmdb rpmdb,
void * _lock)
916 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080)
917 ? dbenv->lock_put(dbenv, (DB_LOCK*)_lock)
920 fprintf(stderr,
"<-- %s(%p,%p) rc %d\n",
"dbenv->lock_put", dbenv, _lock, rc);
925 int rpmlgcOpen(rpmdb rpmdb)
928 DB_LOGC * _logc = NULL;
930 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100)
931 ? dbenv->log_cursor(dbenv, &_logc, _flags) : ENOTSUP;
932 rpmdb->db_logc = (!rc ? _logc : NULL);
934 fprintf(stderr,
"<-- %s(%p,%p,0x%x) logc %p rc %d\n",
"dbenv->log_cursor", dbenv, &_logc, _flags, _logc, rc);
939 int rpmlgcGet(rpmdb rpmdb, DB_LSN * _lsn,
DBT * data, uint32_t flags)
941 DB_LOGC * _logc = (DB_LOGC*)rpmdb->db_logc;
942 int rc = (_logc ? _logc->get(_logc, _lsn, data, flags) : ENOTSUP);
944 fprintf(stderr,
"<-- %s(%p,%p,%p,0x%x) rc %d\n",
"logc->get", _logc, _lsn, data, flags, rc);
949 int rpmlgcClose(rpmdb rpmdb)
951 DB_LOGC * _logc = (DB_LOGC*)rpmdb->db_logc;
953 int rc = (_logc ? _logc->close(_logc, _flags) : ENOTSUP);
954 rpmdb->db_logc = NULL;
956 fprintf(stderr,
"<-- %s(%p) rc %d\n",
"logc->close", _logc, rc);
961 int rpmlgcFile(rpmdb rpmdb,
const DB_LSN * _lsn,
char *
name,
size_t len)
964 int rc = dbenv->log_file(dbenv, _lsn, name, len);
966 fprintf(stderr,
"<-- %s(%p,%p,%p[%u]) \"%s\" rc %d\n",
"dbenv->log_file", dbenv, _lsn, name, (
unsigned)len, name, rc);
971 int rpmlgcFlush(rpmdb rpmdb,
const DB_LSN * _lsn)
974 int rc = dbenv->log_flush(dbenv, _lsn);
976 fprintf(stderr,
"<-- %s(%p,%p) rc %d\n",
"dbenv->log_flush", dbenv, _lsn, rc);
981 int rpmlgcPrintf(rpmdb rpmdb,
const char * fmt,
void *_A1,
void *_A2,
void *_A3,
void *_A4,
void *_A5)
985 int rc = dbenv->log_printf(dbenv, _txnid, fmt, _A1, _A2, _A3, _A4, _A5);
987 fprintf(stderr,
"<-- %s(%p,%p,\"%s\", ...) rc %d\n",
"dbenv->log_printf", dbenv, _txnid, fmt, rc);
992 int rpmlgcPut(rpmdb rpmdb, DB_LSN * _lsn,
const DBT * data, uint32_t flags)
995 int rc = dbenv->log_put(dbenv, _lsn, data, flags);
997 fprintf(stderr,
"<-- %s(%p,%p,%p,0x%x) rc %d\n",
"dbenv->log_put", dbenv, _lsn, data, flags, rc);
1002 int rpmmpfSyncAll(rpmdb rpmdb)
1005 DB_LSN * _lsn = NULL;
1006 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100)
1007 ? dbenv->memp_sync(dbenv, _lsn) : ENOTSUP;
1009 fprintf(stderr,
"<-- %s(%p,%p) rc %d\n",
"dbenv->memp_sync", dbenv, _lsn, rc);
1014 int rpmmpfTrickle(rpmdb rpmdb)
1019 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100)
1020 ? dbenv->memp_trickle(dbenv, _percent, &_nwrote) : ENOTSUP;
1022 fprintf(stderr,
"<-- %s(%p,%d) nwrote %d rc %d\n",
"dbenv->memp_trickle", dbenv, _percent, _nwrote, rc);
1027 int rpmmpfClose(rpmdb rpmdb)
1029 DB_MPOOLFILE * mpf = (DB_MPOOLFILE*)rpmdb->db_mpf;
1030 uint32_t _flags = 0;
1031 int rc = (mpf ? mpf->close(mpf, _flags) : ENOTSUP);
1032 rpmdb->db_mpf = NULL;
1034 fprintf(stderr,
"<-- %s(%p) rc %d\n",
"mpf->close", mpf, rc);
1039 int rpmmpfGet(rpmdb rpmdb, uint32_t * _pgnop, uint32_t _flags,
void ** _pagep)
1041 DB_MPOOLFILE * mpf = (DB_MPOOLFILE*)rpmdb->db_mpf;
1043 int rc = mpf->get(mpf, _pgnop, _txnid, _flags, _pagep);
1045 fprintf(stderr,
"<-- %s(%p,%p,%p,0x%x,%p) rc %d\n",
"mpf->get", mpf, _pgnop, _txnid, _flags, _pagep, rc);
1050 int rpmmpfOpen(rpmdb rpmdb,
const char * fn, uint32_t flags)
1053 DB_MPOOLFILE * mpf = NULL;
1054 int _perms = rpmdb->_dbi[0]->dbi_perms;
1055 size_t _pagesize = BUFSIZ;
1056 uint32_t _fcreate_flags = 0;
1057 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100)
1058 ? dbenv->memp_fcreate(dbenv, &mpf, _fcreate_flags) : ENOTSUP;
1061 fprintf(stderr,
"<-- %s(%p,&mpf,0x%x) mpf %p rc %d\n",
"dbenv->memp_fcreate", dbenv, _fcreate_flags, mpf, rc);
1063 rc = mpf->open(mpf, fn, flags, _perms, _pagesize);
1064 rpmdb->db_mpf = (!rc ? mpf : NULL);
1066 fprintf(stderr,
"<-- %s(%p,%s,0x%x) rc %d\n",
"mpf->open", mpf, fn, flags, rc);
1073 int rpmmpfPut(rpmdb rpmdb,
void * _page, uint32_t flags)
1075 DB_MPOOLFILE * mpf = (DB_MPOOLFILE*) rpmdb->db_mpf;
1076 uint32_t _priority = DB_PRIORITY_DEFAULT;
1077 int rc = mpf->put(mpf, _page, (DB_CACHE_PRIORITY)_priority, flags);
1079 fprintf(stderr,
"<-- %s(%p,%p,0x%x,0x%x) rc %d\n",
"mpf->put", mpf, _page, _priority, flags, rc);
1084 int rpmmpfSync(rpmdb rpmdb)
1086 DB_MPOOLFILE * mpf = (DB_MPOOLFILE*)rpmdb->db_mpf;
1087 int rc = (mpf ? mpf->sync(mpf) : ENOTSUP);
1089 fprintf(stderr,
"<-- %s(%p) rc %d\n",
"mpf->close", mpf, rc);
1145 #define rpmdbUnlink(_db, _msg) \ 1146 ((rpmdb)rpmioUnlinkPoolItem((rpmioItem)(_db), _msg, __FILE__, __LINE__)) 1155 rpmdb
rpmdbLink (rpmdb db,
const char * msg)
1157 #define rpmdbLink(_db, _msg) \ 1158 ((void *)rpmioLinkPoolItem((rpmioItem)(_db), _msg, __FILE__, __LINE__)) 1165 int mode, mode_t perms,
int flags)
1178 int mode, mode_t perms)
1230 const void * keyp,
size_t keylen)
1276 const uint32_t * hdrNums,
int nHdrNums)
1306 uint32_t * hdrNums,
int nHdrNums,
int sorted)
1351 const void * keyp,
size_t keylen)
1396 #define rpmmiUnlink(_mi) \ 1397 ((rpmmi)rpmioUnlinkPoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__)) 1408 #define rpmmiLink(_mi) \ 1409 ((rpmmi)rpmioLinkPoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__)) 1420 #define rpmmiFree(_mi) \ 1421 ((rpmmi)rpmioFreePoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__)) 1433 const char *** argvp)
1459 int rpmdbRemove( rpmdb db,
int rid, uint32_t hdrNum,
1470 int (*cmp) (
const void *,
const void *))
int rpmmiAddPattern(rpmmi mi, rpmTag tag, rpmMireMode mode, const char *pattern)
Add pattern to iterator selector.
rpmtime_t rpmswExit(rpmop op, ssize_t rc)
Exit timed operation.
int rpm_mergesort(void *base, size_t nmemb, size_t size, int(*cmp)(const void *, const void *))
Mergesort, same arguments as qsort(2).
Header rpmmiNext(rpmmi mi)
Return next package header from iteration.
int rpmmiSetRewrite(rpmmi mi, int rewrite)
Prepare iterator for lazy writes.
int rpmdbOpenAll(rpmdb db)
Open all database indices.
int rpmdbCount(rpmdb db, rpmTag tag, const void *keyp, size_t keylen)
Return number of instances of key in a tag index.
int rpmdbCheckTerminate(int terminate)
Check rpmdb signal handler for trapped signal and/or requested exit.
int rpmdbAdd(rpmdb db, int iid, Header h, rpmts ts)
Add package header to rpm database and indices.
uint32_t rpmmiBNTag(rpmmi mi)
Return basename tag for current position of rpmdb iterator.
struct _dbiIndexSet * dbiIndexSet
A single element (i.e.
int rpmdbMireApply(rpmdb db, rpmTag tag, rpmMireMode mode, const char *pat, const char ***argvp)
Return array of keys matching a pattern.
uint32_t dbiIndexRecordFileNumber(dbiIndexSet set, unsigned int recno)
int rpmmiSort(rpmmi mi)
Sort iterator instances.
dbiIndexSet dbiFreeIndexSet(dbiIndexSet set)
int rpmdbCountPackages(rpmdb db, const char *N)
Return number of instances of package in Name index.
int rpmdbCloseDBI(rpmdb db, int tag)
Close a single database index.
int rpmdbRemove(rpmdb db, int rid, uint32_t hdrNum, rpmts ts)
Remove package header from rpm database and indices.
rpmmi rpmmiInit(rpmdb db, rpmTag tag, const void *keyp, size_t keylen)
Return database iterator.
#define rpmdbUnlink(_db, _msg)
int rpmdbBlockDBI(rpmdb db, int tag)
Block access to a single database index.
int rpmmiSetModified(rpmmi mi, int modified)
Modify iterator to mark header for lazy write on release.
int rpmmiGrowBasename(rpmmi mi, const char *bn)
Append packages containing common basename to iterator.
struct tagStore_s * tagStore_t
void * dbiStatsAccumulator(dbiIndex dbi, int opx)
struct rpmdb_s * rpmdb
Database of headers and tag value indices.
struct rpmmi_s * rpmmi
Database iterator.
int rpmswEnter(rpmop op, ssize_t rc)
Enter timed operation.
enum rpmMireMode_e rpmMireMode
Tag value pattern match mode.
Cumulative statistics for an operation.
uint32_t rpmmiInstance(rpmmi mi)
Return header instance for current position of rpmdb iterator.
int rpmdbOpen(const char *prefix, rpmdb *dbp, int mode, mode_t perms)
Open rpm database.
rpmdb rpmdbNew(const char *root, const char *home, int mode, mode_t perms, int flags)
uint32_t dbiIndexRecordOffset(dbiIndexSet set, unsigned int recno)
static const char * prefix[]
Tables for prefixing and suffixing patterns, according to the -w, -x, and -F options.
dbiIndex dbiOpen(rpmdb db, rpmTag tag, unsigned int flags)
struct rpmts_s * rpmts
The RPM Transaction Set.
int rpmdbClose(rpmdb db)
Close all database indices and free rpmdb.
#define rpmdbLink(_db, _msg)
unsigned int rpmmiCount(rpmmi mi)
Return number of elements in rpm database iterator.
int rpmmiPrune(rpmmi mi, uint32_t *hdrNums, int nHdrNums, int sorted)
Remove items from set of package instances to iterate.
int rpmmiGrow(rpmmi mi, const uint32_t *hdrNums, int nHdrNums)
Append items to set of package instances to iterate.
int rpmdbCheckSignals(void)
Check for and exit on termination signals.
struct _dbiIndexItem * dbiIndexItem
struct _dbiIndex * dbiIndex
unsigned int dbiIndexSetCount(dbiIndexSet set)