00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef ZYPP_CacheStore_H
00011 #define ZYPP_CacheStore_H
00012
00013 #include <iosfwd>
00014 #include <string>
00015
00016 #include "zypp/base/ReferenceCounted.h"
00017 #include "zypp/base/NonCopyable.h"
00018 #include "zypp/base/PtrTypes.h"
00019 #include "zypp/Pathname.h"
00020 #include "zypp/NVRA.h"
00021 #include "zypp/ZConfig.h"
00022 #include "zypp/capability/CapabilityImpl.h"
00023 #include "zypp/capability/Capabilities.h"
00024
00025 #include "zypp/data/ResolvableDataConsumer.h"
00026 #include "zypp/data/RecordId.h"
00027
00028 #include "zypp/base/PtrTypes.h"
00029 #include "zypp/RepoStatus.h"
00030 #include "zypp/ProgressData.h"
00031 #include "zypp/cache/Attribute.h"
00032
00034 namespace zypp
00035 {
00036
00037 namespace cache
00038 {
00039
00053 class CacheStore : public data::ResolvableDataConsumer
00054 {
00055 public:
00056
00057 CacheStore();
00058 virtual ~CacheStore();
00059
00069 CacheStore( const Pathname &dbdir );
00070
00074 void commit();
00075
00085 virtual data::RecordId consumePackage(const data::RecordId &repository_id,
00086 const data::Package_Ptr & package);
00087
00095 virtual data::RecordId consumeSourcePackage( const data::RecordId &catalog_id,
00096 const data::SrcPackage_Ptr & srcpackage );
00097
00105 virtual data::RecordId consumePatch( const data::RecordId &repository_id,
00106 const data::Patch_Ptr & patch );
00107
00120 virtual data::RecordId consumePackageAtom( const data::RecordId &repository_id,
00121 const data::PackageAtom_Ptr & atom );
00122
00130 virtual data::RecordId consumeMessage( const data::RecordId & repository_id,
00131 const data::Message_Ptr & message);
00132
00140 virtual data::RecordId consumeScript( const data::RecordId & repository_id,
00141 const data::Script_Ptr & script);
00142
00150 virtual data::RecordId consumePattern( const data::RecordId & repository_id,
00151 const data::Pattern_Ptr & pattern );
00152
00160 virtual data::RecordId consumeProduct( const data::RecordId &repository_id,
00161 const data::Product_Ptr & product );
00162
00172 virtual data::RecordId consumeChangelog( const data::RecordId & resolvable_id,
00173 const Changelog & changelog );
00174
00184 virtual data::RecordId consumeFilelist( const data::RecordId & resolvable_id,
00185 const data::Filenames & filenames );
00186
00199 virtual void consumeDiskUsage( const data::RecordId &resolvable_id,
00200 const DiskUsage &disk );
00201
00202
00211 virtual void updatePackageLang( const data::RecordId & resolvable_id,
00212 const data::Packagebase_Ptr & data_r );
00214 public:
00239 data::RecordId appendResolvable( const data::RecordId &repository_id,
00240 const Resolvable::Kind &kind,
00241 const NVRA &nvra,
00242 const data::Dependencies &deps );
00243
00254 data::RecordId appendResolvable( const data::RecordId &repository_id,
00255 const Resolvable::Kind &kind,
00256 const NVRA &nvra,
00257 const data::Dependencies &deps,
00258 const data::RecordId &shared_id );
00270 void appendDependencies( const data::RecordId &resolvable_id,
00271 const data::Dependencies &dependencies );
00272
00285 void appendDependencyList( const data::RecordId &resolvable_id,
00286 zypp::Dep deptype,
00287 const data::DependencyList &dlist );
00288
00301 void appendDependency( const data::RecordId &resolvable_id,
00302 zypp::Dep deptype,
00303 capability::CapabilityImpl::Ptr cap );
00304
00320 void appendNamedDependency( const data::RecordId &, zypp::Dep,
00321 capability::NamedCap::Ptr);
00322
00338 void appendFileDependency( const data::RecordId &, zypp::Dep,
00339 capability::FileCap::Ptr);
00340
00356 void appendModaliasDependency( const data::RecordId &resolvable_id,
00357 zypp::Dep deptype,
00358 capability::ModaliasCap::Ptr cap);
00359
00375 void appendHalDependency( const data::RecordId &resolvable_id,
00376 zypp::Dep deptype,
00377 capability::HalCap::Ptr cap );
00378
00394 void appendFilesystemDependency( const data::RecordId &resolvable_id,
00395 zypp::Dep deptype,
00396 capability::FilesystemCap::Ptr cap );
00397
00413 void appendSplitDependency( const data::RecordId &resolvable_id,
00414 zypp::Dep deptype,
00415 capability::SplitCap::Ptr cap );
00416
00432 void appendUnknownDependency( const data::RecordId &resolvable_id,
00433 zypp::Dep deptype,
00434 capability::CapabilityImpl::Ptr cap );
00435
00442 data::RecordId appendPatchRpm( const data::RecordId &repo_id,
00443 const data::PatchRpm_Ptr & prpm);
00444
00445
00452 data::RecordId appendDeltaRpm( const data::RecordId &repo_id,
00453 const data::DeltaRpm_Ptr & drpm);
00454
00455
00468 data::RecordId lookupOrAppendType( const std::string &klass,
00469 const std::string &name );
00471 data::RecordId lookupOrAppendType( const Attribute &attr )
00472 { return lookupOrAppendType( attr.klass, attr.name ); }
00473
00483 data::RecordId lookupOrAppendRepository( const std::string &alias );
00484
00500 void setSharedData( const data::RecordId &resolvable_id,
00501 const data::RecordId &shared_id );
00502
00510 void appendNumericAttribute( const data::RecordId &resolvable_id,
00511 const std::string &klass,
00512 const std::string &name,
00513 int value );
00515 void appendNumericAttribute( const data::RecordId &resolvable_id,
00516 const Attribute& attr,
00517 int value )
00518 { appendNumericAttribute( resolvable_id, attr.klass, attr.name, value ); }
00519
00527 void appendTranslatedStringAttribute( const data::RecordId &resolvable_id,
00528 const std::string &klass,
00529 const std::string &name,
00530 const TranslatedText &text );
00532 void appendTranslatedStringAttribute( const data::RecordId &resolvable_id,
00533 const Attribute& attr,
00534 const TranslatedText &text )
00535 { appendTranslatedStringAttribute( resolvable_id, attr.klass, attr.name, text ); }
00536
00545 void appendStringAttributeTranslation( const data::RecordId &resolvable_id,
00546 const Locale &locale,
00547 const std::string &klass,
00548 const std::string &name,
00549 const std::string &text );
00551 void appendStringAttributeTranslation( const data::RecordId &resolvable_id,
00552 const Locale &locale,
00553 const Attribute& attr,
00554 const std::string &text )
00555 { appendStringAttributeTranslation( resolvable_id, locale, attr.klass, attr.name, text ); }
00556
00564 void appendStringAttribute( const data::RecordId &resolvable_id,
00565 const std::string &klass,
00566 const std::string &name,
00567 const std::string &value );
00569 void appendStringAttribute( const data::RecordId &resolvable_id,
00570 const Attribute& attr,
00571 const std::string &value )
00572 { appendStringAttribute( resolvable_id, attr.klass, attr.name, value ); }
00573
00580 void appendStringAttribute( const data::RecordId &resolvable_id,
00581 const data::RecordId &type_id,
00582 const std::string &value );
00583
00599 template <class _Iterator>
00600 void appendStringContainerAttribute( const data::RecordId &resolvable_id,
00601 const std::string &klass,
00602 const std::string &name,
00603 _Iterator begin,
00604 _Iterator end )
00605 {
00606 std::string value = str::join(begin, end, ZConfig::instance().cacheDBSplitJoinSeparator());
00607 appendStringAttribute( resolvable_id, klass, name, value );
00608 }
00610 template <class _Iterator>
00611 void appendStringContainerAttribute( const data::RecordId &resolvable_id,
00612 const Attribute& attr,
00613 _Iterator begin,
00614 _Iterator end )
00615 { appendStringContainerAttribute( resolvable_id, attr.klass, attr.name, begin, end ); }
00616
00625 template <class _Container>
00626 void appendStringContainerAttribute( const data::RecordId &resolvable_id,
00627 const std::string &klass,
00628 const std::string &name,
00629 const _Container & container )
00630 { appendStringContainerAttribute( resolvable_id, klass, name, container.begin(), container.end() ); }
00632 template <class _Container>
00633 void appendStringContainerAttribute( const data::RecordId &resolvable_id,
00634 const Attribute& attr,
00635 const _Container & container )
00636 { appendStringContainerAttribute( resolvable_id, attr.klass, attr.name, container ); }
00637
00650 void updateRepositoryStatus( const data::RecordId &id,
00651 const RepoStatus &status );
00652
00663 void cleanRepository( const data::RecordId &id,
00664 const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
00665
00676 void cleanRepository( const std::string &alias,
00677 const ProgressData::ReceiverFnc & progressrcv = ProgressData::ReceiverFnc() );
00678
00691 RepoStatus repositoryStatus( const data::RecordId &id );
00692
00705 RepoStatus repositoryStatus( const std::string &alias );
00706
00712 bool isCached( const std::string &alias );
00713
00722 data::RecordId lookupRepository( const std::string &alias );
00723
00724
00732 data::RecordId lookupOrAppendFile( const Pathname &path );
00733
00741 data::RecordId lookupOrAppendName( const std::string &name );
00742
00750 data::RecordId lookupOrAppendDirName( const std::string &name );
00751
00759 data::RecordId lookupOrAppendFileName( const std::string &name );
00760
00761 protected:
00767
00768
00769
00770 void appendStringAttribute( const data::RecordId &resolvable_id,
00771 const data::RecordId &lang_id,
00772 const data::RecordId &type_id,
00773 const std::string &value );
00774
00781 void appendNumericAttribute( const data::RecordId &resolvable_id,
00782 const data::RecordId &type_id,
00783 int value );
00784
00793 void appendBooleanAttribute( const data::RecordId & resolvable_id,
00794 const std::string & klass,
00795 const std::string & name,
00796 bool value);
00798 void appendBooleanAttribute( const data::RecordId & resolvable_id,
00799 const Attribute& attr,
00800 bool value)
00801 { appendBooleanAttribute( resolvable_id, attr.klass, attr.name, value ); }
00802
00803
00809 void appendResObjectAttributes( const data::RecordId &rid,
00810 const data::ResObject_Ptr & res );
00811
00812 void appendPackageBaseAttributes(const data::RecordId & pkgid,
00813 const data::Packagebase_Ptr & package);
00815
00816
00817 private:
00819 class Impl;
00821 RW_pointer<Impl> _pimpl;
00822 };
00823 }
00824 }
00825
00826 #endif
00827