Author: dmacvicar Date: Fri Aug 3 13:41:16 2007 New Revision: 6426 URL: http://svn.opensuse.org/viewcvs/zypp?rev=6426&view=rev Log: - add split and filesystem caps to cache - make cache initializer go out of scope as soon it is not needed anymore Modified: trunk/libzypp/zypp/cache/CacheInitializer.h trunk/libzypp/zypp/cache/CacheStore.cc trunk/libzypp/zypp/cache/CacheStore.h trunk/libzypp/zypp/cache/schema/schema.sql Modified: trunk/libzypp/zypp/cache/CacheInitializer.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/cache/CacheInitializer.h?rev=6426&r1=6425&r2=6426&view=diff ============================================================================== --- trunk/libzypp/zypp/cache/CacheInitializer.h (original) +++ trunk/libzypp/zypp/cache/CacheInitializer.h Fri Aug 3 13:41:16 2007 @@ -19,7 +19,7 @@ #include "zypp/Pathname.h" #include "zypp/cache/sqlite3x/sqlite3x.hpp" -#define ZYPP_CACHE_SCHEMA_VERSION 1002 +#define ZYPP_CACHE_SCHEMA_VERSION 1003 /////////////////////////////////////////////////////////////////// namespace zypp Modified: trunk/libzypp/zypp/cache/CacheStore.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/cache/CacheStore.cc?rev=6426&r1=6425&r2=6426&view=diff ============================================================================== --- trunk/libzypp/zypp/cache/CacheStore.cc (original) +++ trunk/libzypp/zypp/cache/CacheStore.cc Fri Aug 3 13:41:16 2007 @@ -54,17 +54,18 @@ Impl( const Pathname &dbdir ) : name_cache_hits(0) { - cache::CacheInitializer initializer(dbdir, "zypp.db"); - if ( initializer.justInitialized() ) + // let the initializer go out of scope after it executes { - MIL << "database " << (dbdir + "zypp.db") << " was just created" << endl; + cache::CacheInitializer initializer(dbdir, "zypp.db"); + if ( initializer.justInitialized() ) + { + MIL << "database " << (dbdir + "zypp.db") << " was just created" << endl; + } } - + try { 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) { @@ -108,6 +109,10 @@ append_hal_dependency_cmd.reset( new sqlite3_command( con, "insert into hal_capabilities ( resolvable_id, dependency_type, refers_kind, name, value, relation ) values ( :resolvable_id, :dependency_type, :refers_kind, :name, :value, :relation );" )); + append_filesystem_dependency_cmd.reset( new sqlite3_command( con, "insert into filesystem_capabilities ( resolvable_id, dependency_type, refers_kind, name_id ) values ( :resolvable_id, :dependency_type, :refers_kind, :name_id );" )); + + append_split_dependency_cmd.reset( new sqlite3_command( con, "insert into split_capabilities ( resolvable_id, dependency_type, refers_kind, name_id, file_id ) values ( :resolvable_id, :dependency_type, :refers_kind, :name_id, :file_id );" )); + append_other_dependency_cmd.reset( new sqlite3_command( con, "insert into other_capabilities ( resolvable_id, dependency_type, refers_kind, value ) values ( :resolvable_id, :dependency_type, :refers_kind, :value );" )); append_resolvable_cmd.reset( new sqlite3_command( con, "insert into resolvables ( name, version, release, epoch, arch, kind, shared_id, repository_id ) values ( :name, :version, :release, :epoch, :arch, :kind, :shared_id, :repository_id );" )); @@ -179,6 +184,8 @@ sqlite3_command_ptr append_named_dependency_cmd; sqlite3_command_ptr append_modalias_dependency_cmd; sqlite3_command_ptr append_hal_dependency_cmd; + sqlite3_command_ptr append_filesystem_dependency_cmd; + sqlite3_command_ptr append_split_dependency_cmd; sqlite3_command_ptr append_other_dependency_cmd; sqlite3_command_ptr append_resolvable_cmd; @@ -649,6 +656,49 @@ //delete cmd; } +void CacheStore::appendFilesystemDependency( const data::RecordId &resolvable_id, + zypp::Dep deptype, + capability::FilesystemCap::Ptr cap ) +{ + if ( !cap ) + ZYPP_THROW(Exception("bad versioned dep")); + //DBG << "versioned : " << cap << endl; + + //RecordId capability_id = appendDependencyEntry( resolvable_id, deptype, cap->refers() ); + RecordId name_id = lookupOrAppendName(cap->name()); + + _pimpl->append_filesystem_dependency_cmd->bind( ":resolvable_id", resolvable_id ); + _pimpl->append_filesystem_dependency_cmd->bind( ":dependency_type", lookupOrAppendType("deptype", deptype.asString()) ); + _pimpl->append_filesystem_dependency_cmd->bind( ":refers_kind", lookupOrAppendType("kind", cap->refers().asString()) ); + + //_pimpl->append_filesystem_dependency_cmd->bind( ":capability_id", capability_id); + _pimpl->append_filesystem_dependency_cmd->bind( ":name_id", name_id); + _pimpl->append_filesystem_dependency_cmd->executenonquery(); +} + + +void CacheStore::appendSplitDependency( const data::RecordId &resolvable_id, + zypp::Dep deptype, + capability::SplitCap::Ptr cap ) +{ + if ( !cap ) + ZYPP_THROW(Exception("bad versioned dep")); + //DBG << "versioned : " << cap << endl; + + //RecordId capability_id = appendDependencyEntry( resolvable_id, deptype, cap->refers() ); + RecordId name_id = lookupOrAppendName(cap->name()); + RecordId file_id = lookupOrAppendFile(cap->path()); + + _pimpl->append_split_dependency_cmd->bind( ":resolvable_id", resolvable_id ); + _pimpl->append_split_dependency_cmd->bind( ":dependency_type", lookupOrAppendType("deptype", deptype.asString()) ); + _pimpl->append_split_dependency_cmd->bind( ":refers_kind", lookupOrAppendType("kind", cap->refers().asString()) ); + + //_pimpl->append_split_dependency_cmd->bind( ":capability_id", capability_id); + _pimpl->append_split_dependency_cmd->bind( ":name_id", name_id); + _pimpl->append_split_dependency_cmd->bind( ":file_id", file_id); + _pimpl->append_split_dependency_cmd->executenonquery(); +} + void CacheStore::appendUnknownDependency( const RecordId &resolvable_id, zypp::Dep deptype, capability::CapabilityImpl::Ptr cap ) Modified: trunk/libzypp/zypp/cache/CacheStore.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/cache/CacheStore.h?rev=6426&r1=6425&r2=6426&view=diff ============================================================================== --- trunk/libzypp/zypp/cache/CacheStore.h (original) +++ trunk/libzypp/zypp/cache/CacheStore.h Fri Aug 3 13:41:16 2007 @@ -377,6 +377,44 @@ capability::HalCap::Ptr cap ); /** + * Adds a Filesystem dependency to the store. + * + * A \ref FilesystemCap::Ptr \a cap to be specified. Among + * which type of dependency \ref zypp::Dep it is as + * the \a deptype argument. + * + * \a resolvable_id is the resolvable Id in the CacheStore + * that will own the capability + * + * You can create the filesystem capability using either + * \ref capability::parse or \ref capability::buildFilesystem + * + * FIXME should it \throw if the resolvable does not exist? + */ + void appendFilesystemDependency( const data::RecordId &resolvable_id, + zypp::Dep deptype, + capability::FilesystemCap::Ptr cap ); + + /** + * Adds a split dependency to the store. + * + * A \ref SplitCap::Ptr \a cap to be specified. Among + * which type of dependency \ref zypp::Dep it is as + * the \a deptype argument. + * + * \a resolvable_id is the resolvable Id in the CacheStore + * that will own the capability + * + * You can create the filesystem capability using either + * \ref capability::parse or \ref capability::buildSplit + * + * FIXME should it \throw if the resolvable does not exist? + */ + void appendSplitDependency( const data::RecordId &resolvable_id, + zypp::Dep deptype, + capability::SplitCap::Ptr cap ); + + /** * Adds a unknown dependency to the store. * * A \ref Capability::Ptr \a cap to be specified. Among Modified: trunk/libzypp/zypp/cache/schema/schema.sql URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/cache/schema/schema.sql?rev=6426&r1=6425&r2=6426&view=diff ============================================================================== --- trunk/libzypp/zypp/cache/schema/schema.sql (original) +++ trunk/libzypp/zypp/cache/schema/schema.sql Fri Aug 3 13:41:16 2007 @@ -240,14 +240,14 @@ ); CREATE INDEX file_capabilities_resolvable ON file_capabilities(resolvable_id); -CREATE TABLE other_capabilities ( +CREATE TABLE filesystem_capabilities ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , resolvable_id INTEGER REFERENCES resolvables(id) , dependency_type INTEGER , refers_kind INTEGER - , value TEXT + , name_id INTEGER REFERENCES names(id) ); -CREATE INDEX other_capabilities_resolvable ON other_capabilities(resolvable_id); +CREATE INDEX filesystem_capabilities_resolvable ON filesystem_capabilities(resolvable_id); CREATE TABLE split_capabilities ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL @@ -259,6 +259,15 @@ ); CREATE INDEX split_capabilities_resolvable ON split_capabilities(resolvable_id); +CREATE TABLE other_capabilities ( + id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL + , resolvable_id INTEGER REFERENCES resolvables(id) + , dependency_type INTEGER + , refers_kind INTEGER + , value TEXT +); +CREATE INDEX other_capabilities_resolvable ON other_capabilities(resolvable_id); + ------------------------------------------------ -- File list ------------------------------------------------ -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org