1 // -*- mode: cpp; mode: fold -*-
3 // $Id: cachedb.h,v 1.4 2004/05/08 19:41:01 mdz Exp $
4 /* ######################################################################
8 Simple uniform interface to a cache database.
10 ##################################################################### */
15 #include <apt-pkg/hashes.h>
16 #include <apt-pkg/debfile.h>
35 // Database state/access
44 // Generate a key for the DB of a given type
45 void _InitQuery(const char *Type
)
47 memset(&Key
,0,sizeof(Key
));
48 memset(&Data
,0,sizeof(Data
));
50 Key
.size
= snprintf(TmpKey
,sizeof(TmpKey
),"%s:%s",FileName
.c_str(), Type
);
53 void InitQueryStats() {
56 void InitQuerySource() {
59 void InitQueryControl() {
62 void InitQueryContent() {
68 return Dbp
->get(Dbp
,0,&Key
,&Data
,0) == 0;
70 inline bool Put(const void *In
,unsigned long const &Length
)
75 Data
.data
= (void *)In
;
76 if (DBLoaded
== true && (errno
= Dbp
->put(Dbp
,0,&Key
,&Data
,0)) != 0)
89 // GetCurStat needs some compat code, see lp #1274466)
90 bool GetCurStatCompatOldFormat();
91 bool GetCurStatCompatNewFormat();
94 bool GetFileStat(bool const &doStat
= false);
96 bool LoadContents(bool const &GenOnly
);
98 bool GetHashes(bool const GenOnly
, unsigned int const DoHashes
);
100 // Stat info stored in the DB, Fixed types since it is written to disk.
101 enum FlagList
{FlControl
= (1<<0),FlMD5
=(1<<1),FlContents
=(1<<2),
102 FlSize
=(1<<3), FlSHA1
=(1<<4), FlSHA256
=(1<<5),
103 FlSHA512
=(1<<6), FlSource
=(1<<7)
106 // the on-disk format changed (FileSize increased to 64bit) in
107 // commit 650faab0 which will lead to corruption with old caches
108 struct StatStoreOldFormat
118 // WARNING: this struct is read/written to the DB so do not change the
119 // layout of the fields (see lp #1274466), only append to it
130 struct StatStore OldStat
;
133 std::string FileName
;
139 // Data collection helpers
140 debDebFile::MemControlExtract Control
;
141 ContentsExtract Contents
;
143 HashStringList HashesList
;
145 // Runtime statistics
153 unsigned long Packages
;
154 unsigned long Misses
;
155 unsigned long long DeLinkBytes
;
157 inline void Add(const Stats
&S
) {
159 MD5Bytes
+= S
.MD5Bytes
;
160 SHA1Bytes
+= S
.SHA1Bytes
;
161 SHA256Bytes
+= S
.SHA256Bytes
;
162 SHA512Bytes
+= S
.SHA512Bytes
;
163 Packages
+= S
.Packages
;
165 DeLinkBytes
+= S
.DeLinkBytes
;
167 Stats() : Bytes(0), MD5Bytes(0), SHA1Bytes(0), SHA256Bytes(0),
168 SHA512Bytes(0),Packages(0), Misses(0), DeLinkBytes(0) {};
171 bool ReadyDB(std::string
const &DB
= "");
172 inline bool DBFailed() {return Dbp
!= 0 && DBLoaded
== false;};
173 inline bool Loaded() {return DBLoaded
== true;};
175 inline unsigned long long GetFileSize(void) {return CurStat
.FileSize
;}
177 bool SetFile(std::string
const &FileName
,struct stat St
,FileFd
*Fd
);
179 // terrible old overloaded interface
180 bool GetFileInfo(std::string
const &FileName
,
181 bool const &DoControl
,
182 bool const &DoContents
,
183 bool const &GenContentsOnly
,
185 unsigned int const DoHashes
,
186 bool const &checkMtime
= false);
192 explicit CacheDB(std::string
const &DB
);