From: Jan Kupec Date: Sun, 3 Jun 2007 23:11:45 +0000 (+0000) Subject: - storing almost all resolvable data X-Git-Tag: BASE-SuSE-Linux-10_3-Branch~676 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=95fdfa8e2215522ce9a1057d79bf07bb57899da8;p=platform%2Fupstream%2Flibzypp.git - storing almost all resolvable data - cleaned-up ResolvableDataConsumer interface --- diff --git a/devel/devel.jkupec/CMakeLists.txt b/devel/devel.jkupec/CMakeLists.txt index 624f8d5..8345b99 100644 --- a/devel/devel.jkupec/CMakeLists.txt +++ b/devel/devel.jkupec/CMakeLists.txt @@ -1,5 +1,3 @@ -INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ) - ADD_DEFINITIONS(-DSRC_DIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}\\\") #ADD_EXECUTABLE(sourcedownload sourcedownload.cc) @@ -24,4 +22,3 @@ TARGET_LINK_LIBRARIES(yumparsertest zypp zypp2) ADD_EXECUTABLE( bridge ${bridge_SRCS} ) TARGET_LINK_LIBRARIES( bridge zypp zypp2) - diff --git a/devel/devel.jkupec/dbqueries.sql b/devel/devel.jkupec/dbqueries.sql new file mode 100644 index 0000000..0c69c95 --- /dev/null +++ b/devel/devel.jkupec/dbqueries.sql @@ -0,0 +1,43 @@ +-- what kinds of resolvables have been read? +select * from types where class = 'kind'; + +-- what languages have been encountered? +select * from types where class = 'lang'; + +-- what architectures have been read? +select * from types where class = 'arch'; + +-- what types of dependencies have been encountered? +select * from types where class = 'deptype'; + +-- ---------------------------------------------------------------------------- + +-- how many packages have been read? +select count(*) from resolvables r, types t where t.class = 'kind' and t.name = 'package' and t.id = r.kind; + +-- print resolvable kind -> count table +select t.name, count(*) from resolvables r, types t where t.class = 'kind' and t.id = r.kind group by t.name; + +-- what patches have been read? print id, name, and version +select r.id, r.name, r.version from resolvables r, types t where t.class = 'kind' and t.name = 'patch' and t.id = r.kind; + +-- ---------------------------------------------------------------------------- + +-- print all text and numeric attributes of resolvable with id = 2 +select a.weak_resolvable_id "res-id", t.class "attr-class", t.name "attr-name", a.text "value" + from text_attributes a, types t + where t.id = a.attr_id and a.weak_resolvable_id = 2 +union +select a.weak_resolvable_id "res-id", t.class "attr-class", t.name "attr-name", a.value "value" + from numeric_attributes a, types t + where t.id = a.attr_id and a.weak_resolvable_id = 2 +order by t.class + +-- print all named dependencies of resolvable with id = 2 +select dt.name "dtype", kt.name "kind", n.name "name", rt.name "rel", c.version "version" + from named_capabilities c, types dt, types kt, types rt, names n + where c.dependency_type = dt.id + and c.refers_kind= kt.id + and c.relation = rt.id + and c.name_id = n.id + and resolvable_id = 2; diff --git a/zypp/data/ResolvableDataConsumer.h b/zypp/data/ResolvableDataConsumer.h index b0bc2a4..f59c15f 100644 --- a/zypp/data/ResolvableDataConsumer.h +++ b/zypp/data/ResolvableDataConsumer.h @@ -28,14 +28,14 @@ namespace data ResolvableDataConsumer(); virtual ~ResolvableDataConsumer(); - virtual void consumePackage( const data::RecordId &repository_id, data::Package_Ptr ) = 0; - virtual void consumeSourcePackage( const data::RecordId &repository_id, data::SrcPackage_Ptr ) = 0; - virtual void consumeProduct( const data::RecordId &repository_id, data::Product_Ptr ) = 0; - virtual void consumePatch( const data::RecordId &repository_id, data::Patch_Ptr ) = 0; + virtual void consumePackage( const data::RecordId &repository_id, const data::Package_Ptr &) = 0; + virtual void consumeSourcePackage( const data::RecordId &repository_id, const data::SrcPackage_Ptr &) = 0; + virtual void consumeProduct( const data::RecordId &repository_id, const data::Product_Ptr &) = 0; + virtual void consumePatch( const data::RecordId &repository_id, const data::Patch_Ptr &) = 0; virtual void consumePackageAtom( const data::RecordId &repository_id, const data::PackageAtom_Ptr & ) = 0; - virtual void consumeMessage( const data::RecordId &repository_id, data::Message_Ptr ) = 0; - virtual void consumeScript( const data::RecordId &repository_id, data::Script_Ptr ) = 0; - virtual void consumePattern( const data::RecordId &repository_id, data::Pattern_Ptr ) = 0; + virtual void consumeMessage( const data::RecordId &repository_id, const data::Message_Ptr &) = 0; + virtual void consumeScript( const data::RecordId &repository_id, const data::Script_Ptr &) = 0; + virtual void consumePattern( const data::RecordId &repository_id, const data::Pattern_Ptr &) = 0; virtual void consumeChangelog( const data::RecordId & repository_id, const data::Resolvable_Ptr &, const Changelog & ) = 0; virtual void consumeFilelist( const data::RecordId & repository_id, const data::Resolvable_Ptr &, const data::Filenames & ) = 0; diff --git a/zypp2/cache/CacheStore.cpp b/zypp2/cache/CacheStore.cpp index e59597a..a056a86 100644 --- a/zypp2/cache/CacheStore.cpp +++ b/zypp2/cache/CacheStore.cpp @@ -97,6 +97,19 @@ struct CacheStore::Impl count_shared_cmd.reset( new sqlite3_command( con, "select count(id) from resolvables where shared_id=:rid;" )); + insert_patchrpm_cmd.reset( new sqlite3_command (con, + "insert into patch_packages (media_nr, location, checksum, download_size, build_time) " + "values (:media_nr, :location, :checksum, :download_size, :build_time);" )); + insert_deltarpm_cmd.reset( new sqlite3_command (con, + "insert into delta_packages (media_nr, location, checksum, download_size, build_time, " + "baseversion_version, baseversion_release, baseversion_epoch, baseversion_checksum, " + "baseversion_build_time, baseversion_sequence_info) " + "values (:media_nr, :location, :checksum, :download_size, :build_time, " + ":baseversion_version, :baseversion_release, :baseversion_epoch, :baseversion_checksum, " + ":baseversion_build_time, :baseversion_sequence_info);" )); + append_patch_baseversion_cmd.reset( new sqlite3_command (con, + "insert into patch_packages_baseversions (patch_package_id, version, release, epoch) " + "values (:patch_package_id, :version, :release, :epoch)" )); // disable autocommit @@ -157,6 +170,10 @@ struct CacheStore::Impl sqlite3_command_ptr count_shared_cmd; + sqlite3_command_ptr insert_patchrpm_cmd; + sqlite3_command_ptr insert_deltarpm_cmd; + sqlite3_command_ptr append_patch_baseversion_cmd; + map name_cache; map< pair, RecordId> type_cache; int name_cache_hits; @@ -185,19 +202,24 @@ void CacheStore::commit() _pimpl->con.executenonquery("COMMIT;"); } -void CacheStore::consumeResObject( const data::RecordId &rid, data::ResObject_Ptr res ) +void CacheStore::appendResObjectAttributes( const data::RecordId &rid, + const data::ResObject_Ptr & res ) { appendTranslatedStringAttribute( rid, "ResObject", "description", res->description ); appendTranslatedStringAttribute( rid, "ResObject", "summary", res->summary ); appendNumericAttribute( rid, "ResObject", "installedSize", res->installedSize ); appendNumericAttribute( rid, "ResObject", "buildTime", res->buildTime ); + appendBooleanAttribute( rid, "ResObject", "installOnly", res->installOnly ); + appendStringAttribute( rid, "ResObject", "vendor", res->vendor ); + appendTranslatedStringAttribute( rid, "ResObject", "licenseToConfirm", res->licenseToConfirm ); + appendTranslatedStringAttribute( rid, "ResObject", "insnotify", res->insnotify ); + appendTranslatedStringAttribute( rid, "ResObject", "delnotify", res->delnotify ); } -void CacheStore::consumePackage( const RecordId &repository_id, data::Package_Ptr package ) -{ - RecordId pkgid = appendResolvable( repository_id, ResTraits::kind, NVRA( package->name, package->edition, package->arch ), package->deps ); - consumeResObject( pkgid, package ); +void CacheStore::appendPackageBaseAttributes( const RecordId & pkgid, + const data::Packagebase_Ptr & package ) +{ appendStringAttribute( pkgid, "Package", "checksum", package->repositoryLocation.fileChecksum.checksum() ); appendStringAttribute( pkgid, "Package", "buildhost", package->buildhost ); appendStringAttribute( pkgid, "Package", "distribution", package->distribution ); @@ -215,15 +237,40 @@ void CacheStore::consumePackage( const RecordId &repository_id, data::Package_Pt appendStringAttribute( pkgid, "Package", "location", package->repositoryLocation.filePath.asString() ); } -void CacheStore::consumeSourcePackage( const data::RecordId &repository_id, data::SrcPackage_Ptr srcpackage ) +void CacheStore::consumePackage( const RecordId & repository_id, + const data::Package_Ptr & package ) +{ + RecordId pkgid = appendResolvable( repository_id, ResTraits::kind, + NVRA( package->name, package->edition, package->arch ), package->deps ); + appendResObjectAttributes( pkgid, package ); + appendPackageBaseAttributes( pkgid, package ); +} + +void CacheStore::consumeSourcePackage( const data::RecordId & repository_id, + const data::SrcPackage_Ptr & package ) { + RecordId pkgid = appendResolvable( repository_id, ResTraits::kind, + NVRA( package->name, package->edition, package->arch ), package->deps ); + appendResObjectAttributes( pkgid, package ); + appendPackageBaseAttributes( pkgid, package ); #warning TBD } -void CacheStore::consumePatch( const data::RecordId &repository_id, data::Patch_Ptr patch) +void CacheStore::consumePatch( const data::RecordId & repository_id, + const data::Patch_Ptr & patch) { - RecordId id = appendResolvable( repository_id, ResTraits::kind, NVRA( patch->name, patch->edition, patch->arch ), patch->deps ); - consumeResObject( id, patch ); + RecordId id = appendResolvable( + repository_id, ResTraits::kind, + NVRA( patch->name, patch->edition, patch->arch ), patch->deps ); + + appendResObjectAttributes( id, patch ); + + // patch attributes + appendNumericAttribute( id, "Patch", "timestamp", patch->timestamp ); + appendStringAttribute( id, "Patch", "category", patch->category ); + appendBooleanAttribute( id, "Patch", "rebootNeeded", patch->rebootNeeded ); + appendBooleanAttribute( id, "Patch", "affectsPkgManager", patch->affectsPkgManager ); + DBG << "got patch " << patch->name << ", atoms: "; // cosume atoms @@ -262,45 +309,95 @@ void CacheStore::consumePatch( const data::RecordId &repository_id, data::Patch_ DBG << endl; } -void CacheStore::consumePackageAtom( const data::RecordId &repository_id, const data::PackageAtom_Ptr & atom ) +void CacheStore::consumePackageAtom( const data::RecordId & repository_id, + const data::PackageAtom_Ptr & atom ) { - RecordId id = appendResolvable( repository_id, ResTraits::kind, NVRA( atom->name, atom->edition, atom->arch ), atom->deps ); - consumeResObject( id, atom ); + RecordId id = appendResolvable( repository_id, ResTraits::kind, + NVRA( atom->name, atom->edition, atom->arch ), atom->deps ); + appendResObjectAttributes( id, atom ); + appendPackageBaseAttributes( id, atom ); + + for (set::const_iterator p = atom->patchRpms.begin(); + p != atom->patchRpms.end(); ++p) + appendPatchRpm(*p); + + for (set::const_iterator d = atom->deltaRpms.begin(); + d != atom->deltaRpms.end(); ++d) + appendDeltaRpm(*d); } -void CacheStore::consumeMessage( const data::RecordId &repository_id, data::Message_Ptr message ) +void CacheStore::consumeMessage( const data::RecordId & repository_id, + const data::Message_Ptr & message ) { - RecordId id = appendResolvable( repository_id, ResTraits::kind, NVRA( message->name, message->edition, message->arch ), message->deps ); - consumeResObject( id, message ); + RecordId id = appendResolvable( repository_id, ResTraits::kind, + NVRA( message->name, message->edition, message->arch ), message->deps ); + appendResObjectAttributes( id, message ); + + appendTranslatedStringAttribute( id, "Message", "text", message->text ); } -void CacheStore::consumeScript( const data::RecordId &repository_id, data::Script_Ptr script ) +void CacheStore::consumeScript( const data::RecordId & repository_id, + const data::Script_Ptr & script ) { - RecordId id = appendResolvable( repository_id, ResTraits