1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
<?php
namespace OCA\Carnet\Misc;
use OCP\IDBConnection;
class CacheManager{
private $db;
private $carnetFolder;
public function __construct(IDBConnection $db, $carnetFolder) {
$this->db = $db;
$this->carnetFolder = $carnetFolder;
}
public function addToCache($relativePath, $metadata, $lastmodfile){
$sql = 'INSERT into `*PREFIX*carnet_metadata` VALUES(?, ?, ?)';
$stmt = $this->db->prepare($sql);
$stmt->bindParam(1, $this->carnetFolder->getFullPath($relativePath), \PDO::PARAM_STR);
if(!is_string($metadata))
$metadata = json_encode($metadata);
$stmt->bindParam(2, $metadata, \PDO::PARAM_STR);
$stmt->bindParam(3, $lastmodfile, \PDO::PARAM_INT);
try{
$stmt->execute();
}
catch(\Doctrine\DBAL\Exception\UniqueConstraintViolationException $ex){
$sql = 'UPDATE `*PREFIX*carnet_metadata` SET `metadata` = ?, `last_modification_file` = ? WHERE `path` = ?';
$stmt = $this->db->prepare($sql);
$stmt->bindParam(1, $metadata, \PDO::PARAM_STR);
$stmt->bindParam(3, $this->carnetFolder->getFullPath($relativePath), \PDO::PARAM_STR);
$stmt->bindParam(2, $lastmodfile, \PDO::PARAM_INT);
$stmt->execute();
}
}
public function deleteFromCache($relativePath){
$sql = 'DELETE FROM `*PREFIX*carnet_metadata` WHERE `path` = ?';
$stmt = $this->db->prepare($sql);
$stmt->bindParam(1, $this->carnetFolder->getFullPath($relativePath), \PDO::PARAM_STR);
$stmt->execute();
}
public function getFromCache($arrayRelativePath){
$arrayFullPath = array();
$sql = 'SELECT * FROM `*PREFIX*carnet_metadata` ' .
'WHERE ';
for($i = 0; $i < sizeof($arrayRelativePath); $i++){
$sql .= "`path` = ? ";
if($i < sizeof($arrayRelativePath)-1)
$sql .= "OR ";
array_push($arrayFullPath, $this->carnetFolder->getFullPath($arrayRelativePath[$i]));
}
$stmt = $this->db->prepare($sql);
/* foreach($arrayRelativePath as $relativePath){
$stmt->bindParam($i+1, $relativePath, \PDO::PARAM_STR);
$i++;
}*/
$stmt->execute($arrayFullPath);
$array = array();
$fetched = $stmt->fetchAll();
foreach ($fetched as $row){
$array[substr($row['path'], strlen($this->carnetFolder->getPath())+1)] = json_decode($row['metadata']);
}
$stmt->closeCursor();
return $array;
}
}
?>
|