libzypp: zypp::target::rpm::librpmDb Class Reference

libzypp 17.25.10

Classes | Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes | List of all members
zypp::target::rpm::librpmDb Class Reference

Manage access to librpm database. More...

`#include <librpmDb.h>`

Inheritance diagram for zypp::target::rpm::librpmDb:
[legend]

## Classes
class | D
| librpmDb internal database handle More...
class | db_const_iterator
| Subclass to retrieve database content. More...

## Public Types
typedef intrusive_ptr< librpmDb > | Ptr
typedef intrusive_ptr< const librpmDb > | constPtr

## Public Member Functions
virtual | ~librpmDb ()
| Destructor. More...
const Pathname & | root () const
const Pathname & | dbPath () const
shared_ptr< RpmException > | error () const
| Return any database error. More...
bool | valid () const
bool | empty () const
unsigned | size () const
void * | dont_call_it () const
| Dont call it ;) It's for development and testing only. More...
virtual std::ostream & | dumpOn (std::ostream &str) const
| Dump debug info. More...
Public Member Functions inherited from zypp::base::ReferenceCounted
| ReferenceCounted ()
| Default ctor. More...
| ReferenceCounted (const ReferenceCounted &rhs)
| Copy ctor. More...
virtual | ~ReferenceCounted ()
| Dtor. More...
ReferenceCounted & | operator= (const ReferenceCounted &)
| Assignment. More...
unsigned | refCount () const
| Return reference counter value. More...
void | ref () const
| Add a reference. More...
void | unref () const
| Release a reference. More...

## Static Public Member Functions
static bool | globalInit ()
| Initialize lib librpm (read configfiles etc.). More...
static std::string | expand (const std::string &macro_r)
static std::string | stringPath (const Pathname &root_r, const Pathname &sub_r)
static const Pathname & | defaultRoot ()
static const Pathname & | defaultDbPath ()
static Pathname | suggestedDbPath (const Pathname &root_r)
static void | dbAccess (const Pathname &root_r)
| Adjust access to the given database location, making it the new default location on success. More...
static void | dbAccess (librpmDb::constPtr &ptr_r)
| Same as &ref dbAccess(), but returns the database handle if avaialble, otherwise NULL. More...
static unsigned | dbRelease (bool force_r=false)
| If there are no outstanding references to the database (e.g. More...
static unsigned | blockAccess ()
| Blocks further access to rpmdb. More...
static void | unblockAccess ()
| Allow access to rpmdb e.g. More...
static bool | isBlocked ()
static std::ostream & | dumpState (std::ostream &str)
| Dump debug info. More...
Static Public Member Functions inherited from zypp::base::ReferenceCounted
static void | add_ref (const ReferenceCounted *ptr_r)
| Called by zypp::intrusive_ptr to add a reference. More...
static void | release (const ReferenceCounted *ptr_r)
| Called by zypp::intrusive_ptr to add a reference. More...

## Protected Member Functions
| librpmDb (const Pathname &root_r, const Pathname &dbPath_r, bool readonly_r)
| Private constructor! librpmDb objects are to be created via static interface only. More...
virtual void | unref_to (unsigned refCount_r) const
| Trigger from Rep, after refCount was decreased. More...
Protected Member Functions inherited from zypp::base::ReferenceCounted
virtual void | ref_to (unsigned) const
| Trigger derived classes after refCount was increased. More...

## Static Private Member Functions
static void | dbAccess (librpmDb::Ptr &ptr_r)
| INTENTIONALLY UNDEFINED<\B> because of bug in Ptr classes which allows implicit conversion from librpmDb::Ptr to librpmDb::constPtr. More...
static librpmDb * | newLibrpmDb ()
| For internal use. More...
static void | dbAccess ()
| Access the database at the current default location. More...

## Private Attributes
D & | _d

## Static Private Attributes
static Pathname | _defaultRoot { "/" }
| Current root directory for all operations. More...
static Pathname | _defaultDbPath
| Current directory (below root) that contains the rpmdb. More...
static Pathname | _rpmDefaultDbPath
| _dbpath configured in rpm config. More...
static librpmDb::constPtr | _defaultDb
| Current rpmdb handle. More...
static bool | _dbBlocked = true
| Whether access is blocked (no _defaultDb will be available). More...

## Additional Inherited Members
Related Functions inherited from zypp::base::ReferenceCounted
void | intrusive_ptr_add_ref (const ReferenceCounted *ptr_r)
| intrusive_ptr hook to add_ref. More...
void | intrusive_ptr_release (const ReferenceCounted *ptr_r)
| intrusive_ptr hook to release. More...
std::ostream & | operator<< (std::ostream &str, const ReferenceCounted &obj)
| Stream output. More...

## Detailed Description

Manage access to librpm database.

Definition at line 38 of file librpmDb.h.

## Member Typedef Documentation

## ◆ Ptr

typedef intrusive_ptr<librpmDb> zypp::target::rpm::librpmDb::Ptr

Definition at line 41 of file librpmDb.h.

## ◆ constPtr

typedef intrusive_ptr<const librpmDb> zypp::target::rpm::librpmDb::constPtr

Definition at line 42 of file librpmDb.h.

## Constructor & Destructor Documentation

## ◆ librpmDb()

zypp::target::rpm::librpmDb::librpmDb | ( | const Pathname & | root_r,
|  | const Pathname & | dbPath_r,
|  | bool | readonly_r
| ) |  |
| protected

Private constructor! librpmDb objects are to be created via static interface only.

Definition at line 362 of file librpmDb.cc.

## ◆ ~librpmDb()

zypp::target::rpm::librpmDb::~librpmDb | ( |  | ) |
| virtual

Destructor.

Closes rpmdb.

Definition at line 374 of file librpmDb.cc.

## Member Function Documentation

## ◆ dbAccess() [1/4]

static void zypp::target::rpm::librpmDb::dbAccess | ( | librpmDb::Ptr & | ptr_r | ) |
| staticprivate

INTENTIONALLY UNDEFINED<\B> because of bug in Ptr classes which allows implicit conversion from librpmDb::Ptr to librpmDb::constPtr.

Currently we don't want to provide non const handles, as the database is opened READONLY.

Exceptions

  RpmException |

## ◆ newLibrpmDb()

librpmDb * zypp::target::rpm::librpmDb::newLibrpmDb | ( |  | ) |
| staticprivate

For internal use.

Pointer returned should immediately be wrapped into librpmDb::Ptr.

Exceptions

  RpmException |

Definition at line 162 of file librpmDb.cc.

## ◆ dbAccess() [2/4]

void zypp::target::rpm::librpmDb::dbAccess | ( |  | ) |
| staticprivate

Access the database at the current default location.

If necessary (eg. after dbRelease), the database is opened. This just creates the internal handle. Once the handle is passed to e.g. some db_const_iterator, the database will be closed if the last outstanding reference goes out of scope. If no external reference is created, you'll have to explicitly call dbRelease to close the database.

Exceptions

  RpmException |

Definition at line 244 of file librpmDb.cc.

## ◆ globalInit()

bool zypp::target::rpm::librpmDb::globalInit | ( |  | ) |
| static

Initialize lib librpm (read configfiles etc.).

It's called on demand but you may call it anytime.

Returns
  Whether librpm is initialized.

Definition at line 111 of file librpmDb.cc.

## ◆ expand()

std::string zypp::target::rpm::librpmDb::expand | ( | const std::string & | macro_r | ) |
| static

Returns
  librpm macro expansion.

Definition at line 142 of file librpmDb.cc.

## ◆ stringPath()

static std::string zypp::target::rpm::librpmDb::stringPath | ( | const Pathname & | root_r,
|  | const Pathname & | sub_r
| ) |  |
| inlinestatic

Returns
  String '(root_r)sub_r' used in debug output.

Definition at line 131 of file librpmDb.h.

## ◆ defaultRoot()

static const Pathname& zypp::target::rpm::librpmDb::defaultRoot | ( |  | ) |
| inlinestatic

Returns
  Current root directory for all operations.

Definition at line 141 of file librpmDb.h.

## ◆ defaultDbPath()

static const Pathname& zypp::target::rpm::librpmDb::defaultDbPath | ( |  | ) |
| inlinestatic

Returns
  Current directory (below root) that contains the rpmdb.

Definition at line 149 of file librpmDb.h.

## ◆ suggestedDbPath()

Pathname zypp::target::rpm::librpmDb::suggestedDbPath | ( | const Pathname & | root_r | ) |
| static

Returns
  The preferred location of the rpmdb below root_r. It's the location of an already exising db, otherwise the default location sugested by rpms config.

Exceptions

  RpmInvalidRootException | if root is not an absolute path or no directory for the rpmdb can determined.

no symlink

Definition at line 190 of file librpmDb.cc.

## ◆ dbAccess() [3/4]

void zypp::target::rpm::librpmDb::dbAccess | ( | const Pathname & | root_r | ) |
| static

Adjust access to the given database location, making it the new default location on success.

No relative Pathnames are allowed.

It's not possible to access a database while access is blocked (see blockAccess), but valid Pathnames provided will be stored as new default location.

It's not allowed to switch to another location while a database is accessed. Use dbRelease to force releasing the database first.

Exceptions

  RpmException |

Definition at line 219 of file librpmDb.cc.

## ◆ dbAccess() [4/4]

void zypp::target::rpm::librpmDb::dbAccess | ( | librpmDb::constPtr & | ptr_r | ) |
| static

Same as &ref dbAccess(), but returns the database handle if avaialble, otherwise NULL.

This creates an external reference, thus it should not be used longer than necessary. Be prepared that the handle might become invalid (see dbRelease) later.

Exceptions

  RpmException |

Definition at line 264 of file librpmDb.cc.

## ◆ dbRelease()

unsigned zypp::target::rpm::librpmDb::dbRelease | ( | bool | force_r = `false` | ) |
| static

If there are no outstanding references to the database (e.g.

by db_const_iterator), the database is closed. Subsequent calls to dbAccess may however open the database again.

If forced, the internal reference is dropped and it will look like the database was closed. But physically the database will be closed after all outstanding references are gone.

Returns
  The number of outstandig references to the database, 0 if if database was physically closed.

Definition at line 277 of file librpmDb.cc.

## ◆ blockAccess()

unsigned zypp::target::rpm::librpmDb::blockAccess | ( |  | ) |
| static

Blocks further access to rpmdb.

Basically the same as dbRelease( true ), but subsequent calls to dbAccess will fail returning E_RpmDB_access_blocked.

Returns
  The number of outstandig references to the database, 0 if if database was physically closed.

Definition at line 314 of file librpmDb.cc.

## ◆ unblockAccess()

void zypp::target::rpm::librpmDb::unblockAccess | ( |  | ) |
| static

Allow access to rpmdb e.g.

after blockAccess. Subsequent calls to dbAccess will perform.

NOTE: Initially we're in blocked mode. So you must call unblockAccess unblockAccess at least once. Othwise nothing will happen.

Returns
  The number of outstandig references to the database, 0 if if database was physically closed.

Definition at line 327 of file librpmDb.cc.

## ◆ isBlocked()

static bool zypp::target::rpm::librpmDb::isBlocked | ( |  | ) |
| inlinestatic

Returns
  Whether database access is blocked.

Definition at line 229 of file librpmDb.h.

## ◆ dumpState()

std::ostream & zypp::target::rpm::librpmDb::dumpState | ( | std::ostream & | str | ) |
| static

Dump debug info.

Definition at line 339 of file librpmDb.cc.

## ◆ unref_to()

void zypp::target::rpm::librpmDb::unref_to | ( | unsigned | refCount_r | ) | const
| protectedvirtual

Trigger from Rep, after refCount was decreased.

Reimplemented from zypp::base::ReferenceCounted.

Definition at line 385 of file librpmDb.cc.

## ◆ root()

const Pathname & zypp::target::rpm::librpmDb::root | ( |  | ) | const

Returns
  This handles root directory for all operations.

Definition at line 399 of file librpmDb.cc.

## ◆ dbPath()

const Pathname & zypp::target::rpm::librpmDb::dbPath | ( |  | ) | const

Returns
  This handles directory that contains the rpmdb.

Definition at line 410 of file librpmDb.cc.

## ◆ error()

shared_ptr< RpmException > zypp::target::rpm::librpmDb::error | ( |  | ) | const

Return any database error.

Usg. if the database was blocked by calling dbRelease(true) or blockAccess.

Definition at line 421 of file librpmDb.cc.

## ◆ valid()

bool zypp::target::rpm::librpmDb::valid | ( |  | ) | const
| inline

Returns
  Whether handle is valid.

Definition at line 298 of file librpmDb.h.

## ◆ empty()

bool zypp::target::rpm::librpmDb::empty | ( |  | ) | const

Returns
  True if handle is valid and database is empty.

Definition at line 432 of file librpmDb.cc.

## ◆ size()

unsigned zypp::target::rpm::librpmDb::size | ( |  | ) | const

Returns
  Number of entries in the database (0 if not valid).

Definition at line 443 of file librpmDb.cc.

## ◆ dont_call_it()

void * zypp::target::rpm::librpmDb::dont_call_it | ( |  | ) | const

Dont call it ;) It's for development and testing only.

Definition at line 461 of file librpmDb.cc.

## ◆ dumpOn()

std::ostream & zypp::target::rpm::librpmDb::dumpOn | ( | std::ostream & | str | ) | const
| virtual

Dump debug info.

Reimplemented from zypp::base::ReferenceCounted.

Definition at line 474 of file librpmDb.cc.

## Member Data Documentation

## ◆ _defaultRoot

Pathname zypp::target::rpm::librpmDb::_defaultRoot { "/" }
| staticprivate

Current root directory for all operations.

(initially /)

Definition at line 68 of file librpmDb.h.

## ◆ _defaultDbPath

Pathname zypp::target::rpm::librpmDb::_defaultDbPath
| staticprivate

Current directory (below root) that contains the rpmdb.

Definition at line 73 of file librpmDb.h.

## ◆ _rpmDefaultDbPath

Pathname zypp::target::rpm::librpmDb::_rpmDefaultDbPath
| staticprivate

_dbpath configured in rpm config.

Definition at line 78 of file librpmDb.h.

## ◆ _defaultDb

librpmDb::constPtr zypp::target::rpm::librpmDb::_defaultDb
| staticprivate

Current rpmdb handle.

Definition at line 83 of file librpmDb.h.

## ◆ _dbBlocked

bool zypp::target::rpm::librpmDb::_dbBlocked = true
| staticprivate

Whether access is blocked (no _defaultDb will be available).

Definition at line 88 of file librpmDb.h.

## ◆ _d

D& zypp::target::rpm::librpmDb::_d
| private

Definition at line 257 of file librpmDb.h.

The documentation for this class was generated from the following files:

- zypp/target/rpm/librpmDb.h
- zypp/target/rpm/librpmDb.cc