17 #if defined(_RPMDB_INTERNAL)
25 #if defined(_RPMDB_INTERNAL)
40 typedef struct rpmdb_s *
rpmdb;
61 #if defined(_RPMDB_INTERNAL)
70 struct _dbiIndexItem {
80 struct _dbiIndexItem *
recs;
88 const char * dbv_version;
132 int (*callback) (
DB *,
const DBT *,
const DBT *, DBT *),
146 int (*callback) (DB *,
const DBT *, DBT *,
const DBT *,
int *),
182 int (*seqno) (
dbiIndex dbi, int64_t * seqnop,
unsigned int flags)
195 DBC ** dbcp,
unsigned int dbiflags)
289 unsigned int * countp,
320 const char * dbi_root;
322 const char * dbi_home;
324 const char * dbi_file;
326 const char * dbi_subfile;
328 const char * dbi_tmpdir;
354 unsigned long dbi_cl_timeout;
355 unsigned long dbi_sv_timeout;
361 void (*db_errcall) (
void * dbenv,
const char *db_errpfx,
char *
buffer)
366 const char * dbi_errpfx;
368 unsigned int dbi_thread_count;
377 const char * dbi_seq_id;
378 unsigned int dbi_seq_cachesize;
379 unsigned int dbi_seq_flags;
380 int64_t dbi_seq_initial;
387 int (*dbi_tx_recover) (
DB_ENV *dbenv,
DBT *log_rec,
388 DB_LSN *lsnp,
int redo,
void *info)
395 int dbi_heap_regionsize;
397 void * (*dbi_malloc) (
size_t nbytes)
400 unsigned int dbi_h_ffactor;
401 unsigned int (*dbi_h_hash_fcn) (
DB *,
const void *bytes,
404 unsigned int dbi_h_nelem;
405 unsigned int dbi_h_flags;
406 int (*dbi_h_dup_compare_fcn) (DB *,
const DBT *,
const DBT *,
size_t *)
411 int (*dbi_bt_compare_fcn) (DB *,
const DBT *,
const DBT *,
size_t *)
413 int (*dbi_bt_dup_compare_fcn) (DB *,
const DBT *,
const DBT *,
size_t *)
415 size_t (*dbi_bt_prefix_fcn) (DB *,
const DBT *,
const DBT *)
420 unsigned int dbi_re_len;
422 const char * dbi_re_source;
424 unsigned int dbi_q_extentsize;
427 const char * dbi_primary;
429 const char * dbi_foreign;
437 int dbi_table_exists;
449 const struct _dbiVec * dbi_vec;
460 const char * db_root;
462 const char * db_home;
468 const char * db_errpfx;
474 void (*db_errcall) (
const char * db_errpfx,
char *
buffer)
479 void * (*db_malloc) (
size_t nbytes)
482 void * (*db_realloc) (
void * ptr,
size_t nbytes)
484 void (*db_free) (
void * ptr)
509 #if defined(__LCLINT__)
520 #if defined(_RPMDB_INTERNAL)
522 #if defined(WITH_DB) || defined(WITH_SQLITE)
543 #define db3Free(_dbi) \
544 ((dbiIndex)rpmioFreePoolItem((rpmioItem)(_dbi), __FUNCTION__, __FILE__, __LINE__))
554 extern const char * prDbiOpenFlags(
int dbflags,
int print_dbenv_flags)
596 return (*dbi->dbi_vec->copen) (dbi, txnid, dbcp,
flags);
607 int dbiCclose(
dbiIndex dbi,
DBC * dbcursor,
unsigned int flags)
611 return (*dbi->dbi_vec->cclose) (dbi, dbcursor,
flags);
627 return (*dbi->dbi_vec->cdup) (dbi, dbcursor, dbcp,
flags);
647 assert(key->
data != NULL && key->
size > 0);
649 rc = (dbi->dbi_vec->cdel) (dbi, dbcursor, key, data, flags);
672 rc = (dbi->dbi_vec->cget) (dbi, dbcursor, key, data, flags);
689 DBT * key,
DBT * pkey,
DBT * data,
unsigned int flags)
696 rc = (dbi->dbi_vec->cpget) (dbi, dbcursor, key, pkey, data, flags);
718 assert(key->
data != NULL && key->
size > 0 && data->
data != NULL && data->
size > 0);
720 rc = (dbi->dbi_vec->cput) (dbi, dbcursor, key, data, flags);
734 int dbiCount(
dbiIndex dbi,
DBC * dbcursor,
unsigned int * countp,
739 return (*dbi->dbi_vec->ccount) (dbi, dbcursor, countp,
flags);
749 int dbiClose(
dbiIndex dbi,
unsigned int flags)
753 return (*dbi->dbi_vec->close) (dbi,
flags);
763 int dbiSync (
dbiIndex dbi,
unsigned int flags)
767 return (*dbi->dbi_vec->sync) (dbi,
flags);
778 int dbiExists(
dbiIndex dbi,
DBT * key,
unsigned int flags)
782 return (*dbi->dbi_vec->exists) (dbi,
key,
flags);
793 int dbiSeqno(
dbiIndex dbi, int64_t * seqnop,
unsigned int flags)
797 return (*dbi->dbi_vec->seqno) (dbi, seqnop,
flags);
810 int (*callback) (
DB *,
const DBT *,
const DBT *,
DBT *),
815 return (*dbi->dbi_vec->associate) (dbi, dbisecondary, callback,
flags);
832 return (*dbi->dbi_vec->join) (dbi, curslist, dbcp,
flags);
844 return (*dbi->dbi_vec->byteswapped) (dbi);
854 int dbiStat(
dbiIndex dbi,
unsigned int flags)
857 return (*dbi->dbi_vec->stat) (dbi,
flags);
870 DB_TXN * _txn = (
DB_TXN*)(rpmdb ? rpmdb->db_txn : NULL);
874 #if defined(_RPMDB_INTERNAL)
876 #if !defined(__LCLINT__)
878 int rpmlkId(rpmdb rpmdb, uint32_t *_idp)
881 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080)
882 ? dbenv->lock_id(dbenv, _idp) : ENOTSUP;
884 fprintf(stderr,
"<-- %s(%p,%p) id 0x%x rc %d\n",
"dbenv->lock_id", dbenv, _idp, *_idp, rc);
889 int rpmlkIdFree(rpmdb rpmdb, uint32_t _id)
892 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080)
893 ? dbenv->lock_id_free(dbenv, _id) : ENOTSUP;
895 fprintf(stderr,
"<-- %s(%p,%u) rc %d\n",
"dbenv->lock_id_free", dbenv, (
unsigned)_id, rc);
900 int rpmlkGet(rpmdb rpmdb,
DBT * _object, uint32_t _lockmode,
void * _lock)
903 uint32_t _locker = 0x12344321;
905 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080)
906 ? dbenv->lock_get(dbenv, _locker, _flags, _object, (db_lockmode_t)_lockmode, (DB_LOCK*)_lock)
909 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);
914 int rpmlkPut(rpmdb rpmdb,
void * _lock)
917 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080)
918 ? dbenv->lock_put(dbenv, (DB_LOCK*)_lock)
921 fprintf(stderr,
"<-- %s(%p,%p) rc %d\n",
"dbenv->lock_put", dbenv, _lock, rc);
926 int rpmlgcOpen(rpmdb rpmdb)
929 DB_LOGC * _logc = NULL;
931 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100)
932 ? dbenv->log_cursor(dbenv, &_logc, _flags) : ENOTSUP;
933 rpmdb->db_logc = (!rc ? _logc : NULL);
935 fprintf(stderr,
"<-- %s(%p,%p,0x%x) logc %p rc %d\n",
"dbenv->log_cursor", dbenv, &_logc, _flags, _logc, rc);
940 int rpmlgcGet(rpmdb rpmdb, DB_LSN * _lsn,
DBT * data, uint32_t flags)
942 DB_LOGC * _logc = (DB_LOGC*)rpmdb->db_logc;
943 int rc = (_logc ? _logc->get(_logc, _lsn, data, flags) : ENOTSUP);
945 fprintf(stderr,
"<-- %s(%p,%p,%p,0x%x) rc %d\n",
"logc->get", _logc, _lsn, data, flags, rc);
950 int rpmlgcClose(rpmdb rpmdb)
952 DB_LOGC * _logc = (DB_LOGC*)rpmdb->db_logc;
954 int rc = (_logc ? _logc->close(_logc, _flags) : ENOTSUP);
955 rpmdb->db_logc = NULL;
957 fprintf(stderr,
"<-- %s(%p) rc %d\n",
"logc->close", _logc, rc);
962 int rpmlgcFile(rpmdb rpmdb,
const DB_LSN * _lsn,
char *
name,
size_t len)
965 int rc = dbenv->log_file(dbenv, _lsn, name, len);
967 fprintf(stderr,
"<-- %s(%p,%p,%p[%u]) \"%s\" rc %d\n",
"dbenv->log_file", dbenv, _lsn, name, (
unsigned)len, name, rc);
972 int rpmlgcFlush(rpmdb rpmdb,
const DB_LSN * _lsn)
975 int rc = dbenv->log_flush(dbenv, _lsn);
977 fprintf(stderr,
"<-- %s(%p,%p) rc %d\n",
"dbenv->log_flush", dbenv, _lsn, rc);
982 int rpmlgcPrintf(rpmdb rpmdb,
const char * fmt,
void *_A1,
void *_A2,
void *_A3,
void *_A4,
void *_A5)
986 int rc = dbenv->log_printf(dbenv, _txnid, fmt, _A1, _A2, _A3, _A4, _A5);
988 fprintf(stderr,
"<-- %s(%p,%p,\"%s\", ...) rc %d\n",
"dbenv->log_printf", dbenv, _txnid, fmt, rc);
993 int rpmlgcPut(rpmdb rpmdb, DB_LSN * _lsn,
const DBT * data, uint32_t flags)
996 int rc = dbenv->log_put(dbenv, _lsn, data, flags);
998 fprintf(stderr,
"<-- %s(%p,%p,%p,0x%x) rc %d\n",
"dbenv->log_put", dbenv, _lsn, data, flags, rc);
1003 int rpmmpfSyncAll(rpmdb rpmdb)
1006 DB_LSN * _lsn = NULL;
1007 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100)
1008 ? dbenv->memp_sync(dbenv, _lsn) : ENOTSUP;
1010 fprintf(stderr,
"<-- %s(%p,%p) rc %d\n",
"dbenv->memp_sync", dbenv, _lsn, rc);
1015 int rpmmpfTrickle(rpmdb rpmdb)
1020 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100)
1021 ? dbenv->memp_trickle(dbenv, _percent, &_nwrote) : ENOTSUP;
1023 fprintf(stderr,
"<-- %s(%p,%d) nwrote %d rc %d\n",
"dbenv->memp_trickle", dbenv, _percent, _nwrote, rc);
1028 int rpmmpfClose(rpmdb rpmdb)
1030 DB_MPOOLFILE * mpf = (DB_MPOOLFILE*)rpmdb->db_mpf;
1031 uint32_t _flags = 0;
1032 int rc = (mpf ? mpf->close(mpf, _flags) : ENOTSUP);
1033 rpmdb->db_mpf = NULL;
1035 fprintf(stderr,
"<-- %s(%p) rc %d\n",
"mpf->close", mpf, rc);
1040 int rpmmpfGet(rpmdb rpmdb, uint32_t * _pgnop, uint32_t _flags,
void ** _pagep)
1042 DB_MPOOLFILE * mpf = (DB_MPOOLFILE*)rpmdb->db_mpf;
1044 int rc = mpf->get(mpf, _pgnop, _txnid, _flags, _pagep);
1046 fprintf(stderr,
"<-- %s(%p,%p,%p,0x%x,%p) rc %d\n",
"mpf->get", mpf, _pgnop, _txnid, _flags, _pagep, rc);
1051 int rpmmpfOpen(rpmdb rpmdb,
const char * fn, uint32_t flags)
1054 DB_MPOOLFILE * mpf = NULL;
1055 int _perms = rpmdb->_dbi[0]->dbi_perms;
1056 size_t _pagesize = BUFSIZ;
1057 uint32_t _fcreate_flags = 0;
1058 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100)
1059 ? dbenv->memp_fcreate(dbenv, &mpf, _fcreate_flags) : ENOTSUP;
1062 fprintf(stderr,
"<-- %s(%p,&mpf,0x%x) mpf %p rc %d\n",
"dbenv->memp_fcreate", dbenv, _fcreate_flags, mpf, rc);
1064 rc = mpf->open(mpf, fn, flags, _perms, _pagesize);
1065 rpmdb->db_mpf = (!rc ? mpf : NULL);
1067 fprintf(stderr,
"<-- %s(%p,%s,0x%x) rc %d\n",
"mpf->open", mpf, fn, flags, rc);
1074 int rpmmpfPut(rpmdb rpmdb,
void * _page, uint32_t flags)
1076 DB_MPOOLFILE * mpf = (DB_MPOOLFILE*)rpmdb->db_mpf;
1077 uint32_t _priority = DB_PRIORITY_DEFAULT;
1078 int rc = mpf->put(mpf, _page, (DB_CACHE_PRIORITY)_priority, flags);
1080 fprintf(stderr,
"<-- %s(%p,%p,0x%x,0x%x) rc %d\n",
"mpf->put", mpf, _page, _priority, flags, rc);
1085 int rpmmpfSync(rpmdb rpmdb)
1087 DB_MPOOLFILE * mpf = (DB_MPOOLFILE*)rpmdb->db_mpf;
1088 int rc = (mpf ? mpf->sync(mpf) : ENOTSUP);
1090 fprintf(stderr,
"<-- %s(%p) rc %d\n",
"mpf->close", mpf, rc);
1146 #define rpmdbUnlink(_db, _msg) \
1147 ((rpmdb)rpmioUnlinkPoolItem((rpmioItem)(_db), _msg, __FILE__, __LINE__))
1158 #define rpmdbLink(_db, _msg) \
1159 ((void *)rpmioLinkPoolItem((rpmioItem)(_db), _msg, __FILE__, __LINE__))
1166 int mode, mode_t perms,
int flags)
1179 int mode, mode_t perms)
1231 const void * keyp,
size_t keylen)
1277 const uint32_t * hdrNums,
int nHdrNums)
1307 uint32_t * hdrNums,
int nHdrNums,
int sorted)
1352 const void * keyp,
size_t keylen)
1397 #define rpmmiUnlink(_mi) \
1398 ((rpmmi)rpmioUnlinkPoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__))
1409 #define rpmmiLink(_mi) \
1410 ((rpmmi)rpmioLinkPoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__))
1421 #define rpmmiFree(_mi) \
1422 ((rpmmi)rpmioFreePoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__))
1434 const char *** argvp)
1471 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.
const char const char size_t len
const char bson_timestamp_t * ts
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)
const char const bson * data
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.
const char const bson int mongo_write_concern int flags
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)
const char const bson * key
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.
static void set(char *t, NODE *ip)
static int cmp(const void *arg1, const void *arg2)
dbiIndex dbiOpen(rpmdb db, rpmTag tag, unsigned int flags)
struct rpmts_s * rpmts
The RPM Transaction Set.
const char const char size_t size
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.
const char const char * pattern
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)