cache/CacheQuery.cc
cache/CacheStore.cpp
cache/Utils.cpp
+ cache/DatabaseTypes.cc
)
SET( zypp2_cache_HEADERS
cache/CacheStore.h
cache/CacheQuery.h
cache/Utils.h
+ cache/DatabaseTypes.h
)
#INSTALL( FILES
{
namespace cache
{
-
namespace db
{
Measure timer("Check tables exist");
unsigned int count = _pimpl->con->executeint("select count(*) from sqlite_master where type='table';");
timer.elapsed();
- return ( count == 1 );
+ return ( count == 26 );
}
void CacheInitializer::createTables()
namespace cache
{ /////////////////////////////////////////////////////////////////
- DEFINE_PTR_TYPE(CacheInitializer);
-
///////////////////////////////////////////////////////////////////
//
// CLASS NAME : CacheInitializer
//
- class CacheInitializer : public base::ReferenceCounted, private base::NonCopyable
+ class CacheInitializer
{
friend std::ostream & operator<<( std::ostream & str, const CacheInitializer & obj );
#include "zypp/base/Logger.h"
+#include "zypp2/cache/DatabaseTypes.h"
#include "zypp2/cache/CacheInitializer.h"
#include "zypp2/cache/CacheQuery.h"
using namespace zypp::cache;
using namespace sqlite3x;
+typedef shared_ptr<sqlite3_command> sqlite3_command_ptr;
+typedef shared_ptr<sqlite3_reader> sqlite3_reader_ptr;
+
+struct DatabaseContext
+{
+ sqlite3_connection con;
+ sqlite3_command_ptr select_vercap_cmd;
+ Pathname dbdir;
+};
+
+typedef shared_ptr<DatabaseContext> DatabaseContext_Ptr;
+
class CapabilityQuery::Impl
{
public:
- Impl( sqlite3_connection &con )
- : _con(con), _read(false)
+ Impl( DatabaseContext_Ptr p_context, const zypp::Dep &deptype, const data::RecordId &resolvable_id )
+ : context(p_context), _read(false), _deptype(deptype), _resolvable_id(resolvable_id)
{}
- sqlite3_connection &_con;
- sqlite3_reader _reader;
+ ~Impl()
+ {
+ MIL << endl;
+ }
+
+ DatabaseContext_Ptr context;
+ sqlite3_reader_ptr _reader;
bool _read;
+ zypp::Dep _deptype;
+ data::RecordId _resolvable_id;
};
-CapabilityQuery::CapabilityQuery( Impl *impl )
+CapabilityQuery::CapabilityQuery( Impl *impl)
: _pimpl( impl)
{
- sqlite3_command cmd(_pimpl->_con, "select * from capabilities where resolvable_id=:id;");
//cmd.bind(":id", id);
-
- sqlite3_reader reader = cmd.executereader();
+ _pimpl->context->select_vercap_cmd->bind(":rid", _pimpl->_resolvable_id);
+ _pimpl->context->select_vercap_cmd->bind(":dtype", static_cast<int>( zypp_deptype2db_deptype(_pimpl->_deptype) ) );
+ _pimpl->_reader.reset( new sqlite3_reader(_pimpl->context->select_vercap_cmd->executereader()));
+ MIL << "Done setup query" << endl;
read();
+ MIL << "Done first read" << endl;
+}
+
+CapabilityQuery::~CapabilityQuery()
+{
+ //MIL << endl;
+ // it has to be disposed before the commands
+ _pimpl->_reader.reset();
}
bool CapabilityQuery::read()
{
- return ( _pimpl->_read = _pimpl->_reader.read() );
+ //MIL << endl;
+ return ( _pimpl->_read = _pimpl->_reader->read() );
}
bool CapabilityQuery::valid() const
return _pimpl->_read;
}
+CapabilityImpl::Ptr CapabilityQuery::value()
+{
+ Resolvable::Kind refer = db_kind2zypp_kind( static_cast<db::Kind>(_pimpl->_reader->getint(0)) );
+ //Resolvable::Kind refer = ResTraits<Package>::kind;
+ zypp::Rel rel = db_rel2zypp_rel( static_cast<db::Rel>(_pimpl->_reader->getint(5)) );
+ //zypp::Rel rel = Rel::EQ;
+ capability::VersionedCap *vcap = new capability::VersionedCap( refer, _pimpl->_reader->getstring(1), /* rel */ rel, Edition( _pimpl->_reader->getstring(2), _pimpl->_reader->getstring(3), _pimpl->_reader->getint(4) ) );
+ return capability::VersionedCap::Ptr(vcap);
+}
+
struct CacheQuery::Impl
{
- Impl()
- {}
+ Impl( const Pathname &pdbdir )
+ {
+ cache::CacheInitializer initializer(pdbdir, "zypp.db");
+ if ( initializer.justInitialized() )
+ {
+ MIL << "database " << (pdbdir + "zypp.db") << " was just created" << endl;
+ }
+
+ context.reset(new DatabaseContext);
+ context->dbdir = pdbdir;
+
+ try
+ {
+ context->con.open( (pdbdir + "zypp.db").asString().c_str());
+ //_insert_resolvable_cmd = new sqlite3_command( *_con, INSERT_RESOLVABLE_QUERY );
+ //_insert_package_cmd = new sqlite3_command( *_con, INSERT_PACKAGE_QUERY );
+ context->select_vercap_cmd.reset( new sqlite3_command( context->con, "select c.refers_kind, n.name, v.version, v.release, v.epoch, v.relation from names n, capabilities c, versioned_capabilities v where v.name_id=n.id and c.id=v.dependency_id and c.resolvable_id=:rid and c.dependency_type=:dtype;"));
+ }
+ catch(exception &ex)
+ {
+ //ZYPP_CAUGHT(ex);
+ ZYPP_THROW(Exception(ex.what()));
+ }
+ }
- sqlite3_connection con;
+ DatabaseContext_Ptr context;
};
CacheQuery::CacheQuery( const Pathname &dbdir )
- : _pimpl( new Impl() )
+ : _pimpl( new Impl(dbdir) )
{
- cache::CacheInitializer initializer(dbdir, "zypp.db");
- if ( initializer.justInitialized() )
- {
- MIL << "database " << (dbdir + "zypp.db") << " was just created" << endl;
- }
-
- try
- {
- _pimpl->con.open( (dbdir + "zypp.db").asString().c_str());
- //_insert_resolvable_cmd = new sqlite3_command( *_con, INSERT_RESOLVABLE_QUERY );
- //_insert_package_cmd = new sqlite3_command( *_con, INSERT_PACKAGE_QUERY );
- }
- catch(exception &ex)
- {
- //ZYPP_CAUGHT(ex);
- ZYPP_THROW(Exception(ex.what()));
- }
}
-CapabilityQuery CacheQuery::createCapabilityQuery()
+CapabilityQuery CacheQuery::createCapabilityQuery( const zypp::Dep &deptype, const data::RecordId &resolvable_id )
{
- return CapabilityQuery(new CapabilityQuery::Impl(_pimpl->con));
+ return CapabilityQuery( new CapabilityQuery::Impl( _pimpl->context, deptype, resolvable_id) );
}
CacheQuery::~CacheQuery()
{
-}
\ No newline at end of file
+}
+
namespace cache
{ /////////////////////////////////////////////////////////////////
+ /**
+ * Allows to iterate around the capabilities in
+ * the cache.
+ * Use \ref CacheQuery to create this query.
+ *
+ * \code
+ * CacheQuery query(dbdir);
+ * CapabilityQuery capquery = query.createCapabilityQuery( zypp::Dep::REQUIRES, 1 );
+ * cout << capquery.value() << endl;
+ * while ( capquery.read() )
+ * {
+ * // value is a CapablityImpl::Ptr
+ * cout << capquery.value() << endl;
+ * }
+ * \endcode
+ */
struct CapabilityQuery
{
public:
- class Impl;
- CapabilityQuery( Impl * );
+ /**
+ * reads the next item for the query
+ * returns false if there are no
+ * more results
+ */
bool read();
+ /**
+ * true if the last \ref read()
+ * had a new result
+ */
bool valid() const;
- private:
+ /**
+ * Return a \ref CapabilityImpl::Ptr
+ * from the current result.
+ */
+ capability::CapabilityImpl::Ptr value();
+
/** Implementation. */
+ class Impl;
+ /**
+ * Constructor
+ */
+ CapabilityQuery( Impl *impl );
+ /**
+ * Destructor
+ */
+ ~CapabilityQuery();
+ private:
+
/** Pointer to implementation. */
RW_pointer<Impl> _pimpl;
};
class CacheQuery
{
public:
+ /** Implementation. */
+ class Impl;
CacheQuery( const Pathname &dbdir );
~CacheQuery();
- CapabilityQuery createCapabilityQuery();
+ CapabilityQuery createCapabilityQuery( const zypp::Dep &deptype, const data::RecordId &id );
private:
- /** Implementation. */
- class Impl;
/** Pointer to implementation. */
RW_pointer<Impl> _pimpl;
};
} // ns cache
} // ns zypp
-#endif
\ No newline at end of file
+#endif
+
_pimpl->insert_dependency_entry_cmd->executenonquery();
//delete cmd;
+ long long id = _pimpl->con.insertid();
+ return static_cast<data::RecordId>(id);
}
data::RecordId CacheStore::lookupOrAppendFile( const Pathname &path )
--- /dev/null
+#include "zypp2/cache/DatabaseTypes.h"
+
+using namespace std;
+using namespace zypp;
+using namespace zypp::cache;
+
+namespace zypp
+{
+namespace cache
+{
+
+static struct archrc
+{
+ char *arch;
+ db::Arch rc;
+}
+archtable[] = {
+ { "noarch", db::ARCH_NOARCH },
+ { "i386", db::ARCH_I386 },
+ { "i486", db::ARCH_I486 },
+ { "i586", db::ARCH_I586 },
+ { "i686", db::ARCH_I686 },
+ { "x86_64", db::ARCH_X86_64 },
+ { "ia32e", db::ARCH_IA32E },
+ { "athlon", db::ARCH_ATHLON },
+ { "ppc", db::ARCH_PPC },
+ { "ppc64", db::ARCH_PPC64 },
+ { "s390", db::ARCH_S390 },
+ { "s390x", db::ARCH_S390X },
+ { "ia64", db::ARCH_IA64 },
+ { "sparc", db::ARCH_SPARC },
+ { "sparc64", db::ARCH_SPARC64 },
+ { NULL, db::ARCH_UNKNOWN }
+ };
+
+//----------------------------------------------------------------------------
+
+// Convert ZYPP relation operator to ZMD RCResolvableRelation
+
+db::Rel
+zypp_rel2db_rel( zypp::Rel op)
+{
+
+ /* This enum is here so that gdb can give us pretty strings */
+
+ switch (op.inSwitch())
+ {
+ case Rel::EQ_e:
+ return db::REL_EQUAL;
+ break;
+ case Rel::NE_e:
+ return db::REL_NOT_EQUAL;
+ break;
+ case Rel::LT_e:
+ return db::REL_LESS;
+ break;
+ case Rel::LE_e:
+ return db::REL_LESS_EQUAL;
+ break;
+ case Rel::GT_e:
+ return db::REL_GREATER;
+ break;
+ case Rel::GE_e:
+ return db::REL_GREATER_EQUAL;
+ break;
+ case Rel::ANY_e:
+ return db::REL_ANY;
+ break;
+ case Rel::NONE_e:
+ return db::REL_NONE;
+ break;
+ }
+ return db::REL_INVALID;
+}
+
+
+Rel
+db_rel2zypp_rel (db::Rel rel)
+{
+ switch (rel)
+ {
+ case db::REL_INVALID:
+ return Rel::NONE;
+ break;
+ case db::REL_ANY:
+ return Rel::ANY;
+ break;
+ case db::REL_EQUAL:
+ return Rel::EQ;
+ break;
+ case db::REL_LESS:
+ return Rel::LT;
+ break;
+ case db::REL_LESS_EQUAL:
+ return Rel::LE;
+ break;
+ case db::REL_GREATER:
+ return Rel::GT;
+ break;
+ case db::REL_GREATER_EQUAL:
+ return Rel::GE;
+ break;
+ case db::REL_NOT_EQUAL:
+ return Rel::NE;
+ break;
+ case db::REL_NONE:
+ return Rel::ANY;
+ break;
+ }
+ return Rel::NONE;
+}
+
+//----------------------------------------------------------------------------
+
+// convert ZYPP architecture string to ZMD int
+
+db::Arch
+zypp_arch2db_arch(const Arch & arch)
+{
+ string arch_str = arch.asString();
+ struct archrc *aptr = archtable;
+ while (aptr->arch != NULL)
+ {
+ if (arch_str == aptr->arch)
+ break;
+ aptr++;
+ }
+
+ return aptr->rc;
+}
+
+Arch
+db_arch2zypp_arch (db::Arch rc)
+{
+ if (rc == db::ARCH_UNKNOWN)
+ return Arch();
+
+ struct archrc *aptr = archtable;
+ while (aptr->arch != NULL)
+ {
+ if (aptr->rc == rc)
+ {
+ return Arch (aptr->arch);
+ }
+ aptr++;
+ }
+ WAR << "DbAccess::Rc2Arch(" << rc << ") unknown" << endl;
+ return Arch ();
+}
+
+
+// remove Authors from description Text
+string desc2str (const Text t)
+{
+ static string s; // static so we can use sqlite STATIC below
+ s.clear();
+ string::size_type authors = t.find ("Authors:"); // strip off 'Authors:'
+
+ if (authors == string::npos)
+ { // if no "Authors", point to end of string
+ authors = t.size();
+ }
+
+ // now remove trailing whitespace
+
+ do
+ {
+ --authors;
+ }
+ while (t[authors] == ' ' || t[authors] == '\n');
+ s = string( t, 0, authors+1 );
+
+ return s;
+}
+
+//----------------------------------------------------------------------------
+// convert ZYPP Resolvable kind to ZMD db::Kind
+
+db::Kind
+zypp_kind2db_kind( Resolvable::Kind kind )
+{
+ if (kind == ResTraits<Package>::kind) return db::KIND_PACKAGE;
+ else if (kind == ResTraits<Script>::kind) return db::KIND_SCRIPT;
+ else if (kind == ResTraits<Message>::kind) return db::KIND_MESSAGE;
+ else if (kind == ResTraits<Patch>::kind) return db::KIND_PATCH;
+ else if (kind == ResTraits<Selection>::kind) return db::KIND_SELECTION;
+ else if (kind == ResTraits<Pattern>::kind) return db::KIND_PATTERN;
+ else if (kind == ResTraits<Product>::kind) return db::KIND_PRODUCT;
+ else if (kind == ResTraits<Language>::kind) return db::KIND_LANGUAGE;
+ else if (kind == ResTraits<Atom>::kind) return db::KIND_ATOM;
+ else if (kind == ResTraits<SrcPackage>::kind) return db::KIND_SRC;
+ else if (kind == ResTraits<SystemResObject>::kind) return db::KIND_SYSTEM;
+
+ WAR << "Unknown resolvable kind " << kind << endl;
+ return db::KIND_UNKNOWN;
+}
+
+//----------------------------------------------------------------------------
+// convert ZYPP Resolvable kind to ZMD db::Kind
+
+Resolvable::Kind
+db_kind2zypp_kind( db::Kind kind )
+{
+ switch ( kind )
+ {
+ case db::KIND_PACKAGE:
+ return ResTraits<Package>::kind;
+ case db::KIND_SCRIPT:
+ return ResTraits<Script>::kind;
+ case db::KIND_MESSAGE:
+ return ResTraits<Message>::kind;
+ case db::KIND_PATCH:
+ return ResTraits<Selection>::kind;
+ case db::KIND_PATTERN:
+ return ResTraits<Pattern>::kind;
+ case db::KIND_PRODUCT:
+ return ResTraits<Product>::kind;
+ case db::KIND_LANGUAGE:
+ return ResTraits<Language>::kind;
+ case db::KIND_ATOM:
+ return ResTraits<Atom>::kind;
+ case db::KIND_SRC:
+ return ResTraits<SrcPackage>::kind;
+ case db::KIND_SYSTEM:
+ return ResTraits<SystemResObject>::kind;
+ }
+ // unreached
+}
+
+
+db::DependencyType
+zypp_deptype2db_deptype( zypp::Dep deptype )
+{
+ switch ( deptype.inSwitch() )
+ {
+ case zypp::Dep::PROVIDES_e: return db::DEP_TYPE_PROVIDE;
+ case zypp::Dep::CONFLICTS_e: return db::DEP_TYPE_CONFLICT;
+ case zypp::Dep::OBSOLETES_e: return db::DEP_TYPE_OBSOLETE;
+ case zypp::Dep::FRESHENS_e: return db::DEP_TYPE_FRESHEN;
+ case zypp::Dep::REQUIRES_e: return db::DEP_TYPE_REQUIRE;
+ case zypp::Dep::PREREQUIRES_e: return db::DEP_TYPE_PREREQUIRE;
+ case zypp::Dep::RECOMMENDS_e: return db::DEP_TYPE_RECOMMEND;
+ case zypp::Dep::SUGGESTS_e: return db::DEP_TYPE_SUGGEST;
+ case zypp::Dep::SUPPLEMENTS_e: return db::DEP_TYPE_SUPPLEMENT;
+ case zypp::Dep::ENHANCES_e: return db::DEP_TYPE_ENHANCE;
+ default:
+ return db::DEP_TYPE_UNKNOWN;
+ }
+
+}
+
+zypp::Dep
+db_deptype2zypp_deptype( db::DependencyType deptype )
+{
+ switch ( deptype )
+ {
+ case db::DEP_TYPE_PROVIDE: return zypp::Dep::PROVIDES; break;
+ case db::DEP_TYPE_CONFLICT: return zypp::Dep::CONFLICTS; break;
+ case db::DEP_TYPE_OBSOLETE: return zypp::Dep::OBSOLETES; break;
+ case db::DEP_TYPE_FRESHEN: return zypp::Dep::FRESHENS; break;
+ case db::DEP_TYPE_REQUIRE: return zypp::Dep::REQUIRES; break;
+ case db::DEP_TYPE_PREREQUIRE: return zypp::Dep::PREREQUIRES; break;
+ case db::DEP_TYPE_RECOMMEND: return zypp::Dep::RECOMMENDS; break;
+ case db::DEP_TYPE_SUGGEST: return zypp::Dep::SUGGESTS; break;
+ case db::DEP_TYPE_SUPPLEMENT: return zypp::Dep::SUPPLEMENTS; break;
+ case db::DEP_TYPE_ENHANCE: return zypp::Dep::ENHANCES; break;
+ }
+}
+
+} // ns cache
+} // ns zypp
+
+#ifndef ZYPP_CACHE_DB_TYPES_H
+#define ZYPP_CACHE_DB_TYPES_H
+
#include "zypp2/cache/CacheCommon.h"
#include "zypp/NeedAType.h"
#include "zypp/Resolvable.h"
#include "zypp/Arch.h"
#include "zypp/Rel.h"
-using namespace std;
-using namespace zypp;
-using namespace zypp::cache;
-
-static struct archrc
-{
- char *arch;
- db::Arch rc;
-}
-archtable[] = {
- { "noarch", db::ARCH_NOARCH },
- { "i386", db::ARCH_I386 },
- { "i486", db::ARCH_I486 },
- { "i586", db::ARCH_I586 },
- { "i686", db::ARCH_I686 },
- { "x86_64", db::ARCH_X86_64 },
- { "ia32e", db::ARCH_IA32E },
- { "athlon", db::ARCH_ATHLON },
- { "ppc", db::ARCH_PPC },
- { "ppc64", db::ARCH_PPC64 },
- { "s390", db::ARCH_S390 },
- { "s390x", db::ARCH_S390X },
- { "ia64", db::ARCH_IA64 },
- { "sparc", db::ARCH_SPARC },
- { "sparc64", db::ARCH_SPARC64 },
- { NULL, db::ARCH_UNKNOWN }
- };
-
-//----------------------------------------------------------------------------
-
-// Convert ZYPP relation operator to ZMD RCResolvableRelation
-
-db::Rel
-zypp_rel2db_rel( zypp::Rel op)
-{
-
- /* This enum is here so that gdb can give us pretty strings */
-
- switch (op.inSwitch())
- {
- case Rel::EQ_e:
- return db::REL_EQUAL;
- break;
- case Rel::NE_e:
- return db::REL_NOT_EQUAL;
- break;
- case Rel::LT_e:
- return db::REL_LESS;
- break;
- case Rel::LE_e:
- return db::REL_LESS_EQUAL;
- break;
- case Rel::GT_e:
- return db::REL_GREATER;
- break;
- case Rel::GE_e:
- return db::REL_GREATER_EQUAL;
- break;
- case Rel::ANY_e:
- return db::REL_ANY;
- break;
- case Rel::NONE_e:
- return db::REL_NONE;
- break;
- }
- return db::REL_INVALID;
-}
-
-
-Rel
-db_rel2zypp_rel (db::Rel rel)
-{
- switch (rel)
- {
- case db::REL_INVALID:
- return Rel::NONE;
- break;
- case db::REL_ANY:
- return Rel::ANY;
- break;
- case db::REL_EQUAL:
- return Rel::EQ;
- break;
- case db::REL_LESS:
- return Rel::LT;
- break;
- case db::REL_LESS_EQUAL:
- return Rel::LE;
- break;
- case db::REL_GREATER:
- return Rel::GT;
- break;
- case db::REL_GREATER_EQUAL:
- return Rel::GE;
- break;
- case db::REL_NOT_EQUAL:
- return Rel::NE;
- break;
- case db::REL_NONE:
- return Rel::ANY;
- break;
- }
- return Rel::NONE;
-}
-
-//----------------------------------------------------------------------------
-
-// convert ZYPP architecture string to ZMD int
-
-db::Arch
-zypp_arch2db_arch(const Arch & arch)
-{
- string arch_str = arch.asString();
- struct archrc *aptr = archtable;
- while (aptr->arch != NULL)
- {
- if (arch_str == aptr->arch)
- break;
- aptr++;
- }
-
- return aptr->rc;
-}
-
-Arch
-db_arch2zypp_arch (db::Arch rc)
+namespace zypp
{
- if (rc == db::ARCH_UNKNOWN)
- return Arch();
-
- struct archrc *aptr = archtable;
- while (aptr->arch != NULL)
+ namespace cache
{
- if (aptr->rc == rc)
- {
- return Arch (aptr->arch);
- }
- aptr++;
+ db::Rel zypp_rel2db_rel( zypp::Rel op);
+ zypp::Rel db_rel2zypp_rel ( db::Rel rel);
+
+ db::Arch zypp_arch2db_arch(const zypp::Arch & arch);
+ zypp::Arch db_arch2zypp_arch ( db::Arch rc);
+
+ std::string desc2str (const zypp::Text t);
+
+ db::Kind zypp_kind2db_kind( zypp::Resolvable::Kind kind );
+ zypp::Resolvable::Kind db_kind2zypp_kind( db::Kind kind );
+
+ db::DependencyType zypp_deptype2db_deptype( zypp::Dep deptype );
+ zypp::Dep db_deptype2zypp_deptype( db::DependencyType deptype );
}
- WAR << "DbAccess::Rc2Arch(" << rc << ") unknown" << endl;
- return Arch ();
}
+#endif
-// remove Authors from description Text
-string desc2str (const Text t)
-{
- static string s; // static so we can use sqlite STATIC below
- s.clear();
- string::size_type authors = t.find ("Authors:"); // strip off 'Authors:'
-
- if (authors == string::npos)
- { // if no "Authors", point to end of string
- authors = t.size();
- }
-
- // now remove trailing whitespace
-
- do
- {
- --authors;
- }
- while (t[authors] == ' ' || t[authors] == '\n');
- s = string( t, 0, authors+1 );
-
- return s;
-}
-
-//----------------------------------------------------------------------------
-// convert ZYPP Resolvable kind to ZMD db::Kind
-
-db::Kind
-zypp_kind2db_kind( Resolvable::Kind kind )
-{
- if (kind == ResTraits<Package>::kind) return db::KIND_PACKAGE;
- else if (kind == ResTraits<Script>::kind) return db::KIND_SCRIPT;
- else if (kind == ResTraits<Message>::kind) return db::KIND_MESSAGE;
- else if (kind == ResTraits<Patch>::kind) return db::KIND_PATCH;
- else if (kind == ResTraits<Selection>::kind) return db::KIND_SELECTION;
- else if (kind == ResTraits<Pattern>::kind) return db::KIND_PATTERN;
- else if (kind == ResTraits<Product>::kind) return db::KIND_PRODUCT;
- else if (kind == ResTraits<Language>::kind) return db::KIND_LANGUAGE;
- else if (kind == ResTraits<Atom>::kind) return db::KIND_ATOM;
- else if (kind == ResTraits<SrcPackage>::kind) return db::KIND_SRC;
- else if (kind == ResTraits<SystemResObject>::kind) return db::KIND_SYSTEM;
-
- WAR << "Unknown resolvable kind " << kind << endl;
- return db::KIND_UNKNOWN;
-}
-
-db::DependencyType
-zypp_deptype2db_deptype( zypp::Dep deptype )
-{
- switch ( deptype.inSwitch() )
- {
- case zypp::Dep::PROVIDES_e: return db::DEP_TYPE_PROVIDE;
- case zypp::Dep::CONFLICTS_e: return db::DEP_TYPE_CONFLICT;
- case zypp::Dep::OBSOLETES_e: return db::DEP_TYPE_OBSOLETE;
- case zypp::Dep::FRESHENS_e: return db::DEP_TYPE_FRESHEN;
- case zypp::Dep::REQUIRES_e: return db::DEP_TYPE_REQUIRE;
- case zypp::Dep::PREREQUIRES_e: return db::DEP_TYPE_PREREQUIRE;
- case zypp::Dep::RECOMMENDS_e: return db::DEP_TYPE_RECOMMEND;
- case zypp::Dep::SUGGESTS_e: return db::DEP_TYPE_SUGGEST;
- case zypp::Dep::SUPPLEMENTS_e: return db::DEP_TYPE_SUPPLEMENT;
- case zypp::Dep::ENHANCES_e: return db::DEP_TYPE_ENHANCE;
- default:
- return db::DEP_TYPE_UNKNOWN;
- }
-
-}
-
-zypp::Dep
-db_deptype2zypp_deptype( db::DependencyType deptype )
-{
- switch ( deptype )
- {
- case db::DEP_TYPE_PROVIDE: return zypp::Dep::PROVIDES; break;
- case db::DEP_TYPE_CONFLICT: return zypp::Dep::CONFLICTS; break;
- case db::DEP_TYPE_OBSOLETE: return zypp::Dep::OBSOLETES; break;
- case db::DEP_TYPE_FRESHEN: return zypp::Dep::FRESHENS; break;
- case db::DEP_TYPE_REQUIRE: return zypp::Dep::REQUIRES; break;
- case db::DEP_TYPE_PREREQUIRE: return zypp::Dep::PREREQUIRES; break;
- case db::DEP_TYPE_RECOMMEND: return zypp::Dep::RECOMMENDS; break;
- case db::DEP_TYPE_SUGGEST: return zypp::Dep::SUGGESTS; break;
- case db::DEP_TYPE_SUPPLEMENT: return zypp::Dep::SUPPLEMENTS; break;
- case db::DEP_TYPE_ENHANCE: return zypp::Dep::ENHANCES; break;
- }
-}
\ No newline at end of file
DROP TABLE IF EXISTS files;
DROP TABLE IF EXISTS file_names;
DROP TABLE IF EXISTS file_capabilities;
+DROP TABLE IF EXISTS split_capabilities;
DROP TABLE IF EXISTS dir_names;
DROP TABLE IF EXISTS delta_packages;
DROP TABLE IF EXISTS db_info;
DROP TABLE IF EXISTS capabilities;
DROP INDEX IF EXISTS package_details_resolvable_id;
DROP INDEX IF EXISTS capability_resolvable;
+DROP INDEX IF EXISTS versioned_capabilities_dependency_id;
------------------------------------------------
-- version metadata, probably not needed, there
CREATE TABLE delta_packages (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
- , package_id INTEGER REFERENCES packages(id)
, media_nr INTEGER
, location TEXT
, checksum TEXT
CREATE TABLE patch_packages (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
- , package_id INTEGER REFERENCES packages(id)
, media_nr INTEGER
, location TEXT
, checksum TEXT
, epoch INTEGER
, relation INTEGER
);
+CREATE INDEX versioned_capabilities_dependency_id ON versioned_capabilities (dependency_id);
CREATE TABLE named_capabilities (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL