cache fileid's in oc_cache

This commit is contained in:
Robin Appelman 2012-07-22 03:24:34 +02:00
parent 6843beeae9
commit 59ab8b14c7
2 changed files with 34 additions and 3 deletions

View file

@ -16,6 +16,11 @@ session_write_close();
if($force or !OC_FileCache::inCache('')){
if(!$checkOnly){
OCP\DB::beginTransaction();
if(OC_Cache::isFast()){
OC_Cache::clear('fileid/'); //make sure the old fileid's don't mess things up
}
OC_FileCache::scan($dir,$eventSource);
OC_FileCache::clean();
OCP\DB::commit();

View file

@ -98,6 +98,10 @@ class OC_FileCache{
if(OC_DB::isError($result)){
OC_Log::write('files','error while writing file('.$path.') to cache',OC_Log::ERROR);
}
if($cache=OC_Cache::getUserCache(true)){
$cache->remove('fileid/'.$path);//ensure we don't have -1 cached
}
}
/**
@ -146,6 +150,11 @@ class OC_FileCache{
$query=OC_DB::prepare('UPDATE *PREFIX*fscache SET parent=? ,name=?, path=?, path_hash=? WHERE path_hash=?');
$query->execute(array($newParent,basename($newPath),$newPath,md5($newPath),md5($oldPath)));
if(($cache=OC_Cache::getUserCache(true)) && $cache->hasKey('fileid/'.$oldPath)){
$cache->set('fileid/'.$newPath,$cache->get('fileid/'.$oldPath));
$cache->remove('fileid/'.$oldPath);
}
$query=OC_DB::prepare('SELECT path FROM *PREFIX*fscache WHERE path LIKE ?');
$oldLength=strlen($oldPath);
$updateQuery=OC_DB::prepare('UPDATE *PREFIX*fscache SET path=?, path_hash=? WHERE path_hash=?');
@ -153,6 +162,11 @@ class OC_FileCache{
$old=$row['path'];
$new=$newPath.substr($old,$oldLength);
$updateQuery->execute(array($new,md5($new),md5($old)));
if(($cache=OC_Cache::getUserCache(true)) && $cache->hasKey('fileid/'.$old)){
$cache->set('fileid/'.$new,$cache->get('fileid/'.$old));
$cache->remove('fileid/'.$old);
}
}
}
@ -171,6 +185,8 @@ class OC_FileCache{
//delete everything inside the folder
$query=OC_DB::prepare('DELETE FROM *PREFIX*fscache WHERE path LIKE ?');
$query->execute(array($root.$path.'/%'));
OC_Cache::remove('fileid/'.$root.$path);
}
/**
@ -246,8 +262,13 @@ class OC_FileCache{
$root=OC_Filesystem::getRoot();
}
$fullPath=$root.$path;
if(($cache=OC_Cache::getUserCache(true)) && $cache->hasKey('fileid/'.$fullPath)){
return $cache->get('fileid/'.$fullPath);
}
$query=OC_DB::prepare('SELECT id FROM *PREFIX*fscache WHERE path_hash=?');
$result=$query->execute(array(md5($root.$path)));
$result=$query->execute(array(md5($fullPath)));
if(OC_DB::isError($result)){
OC_Log::write('files','error while getting file id of '.$path,OC_Log::ERROR);
return -1;
@ -255,10 +276,15 @@ class OC_FileCache{
$result=$result->fetchRow();
if(is_array($result)){
return $result['id'];
$id=$result['id'];
}else{
return -1;
$id=-1;
}
if($cache=OC_Cache::getUserCache(true)){
$cache->set('fileid/'.$fullPath,$id);
}
return $id;
}
/**