From 2c23e143d33e231e62dccb450bf1f1b0f3938ccd Mon Sep 17 00:00:00 2001
From: Michael Gapczynski <mtgap@owncloud.com>
Date: Sun, 30 Dec 2012 16:32:55 -0500
Subject: [PATCH] Store etags in the file cache

---
 db_structure.xml            |  8 ++++++++
 lib/files/cache/cache.php   | 10 +++++-----
 lib/files/cache/scanner.php |  1 +
 lib/util.php                |  2 +-
 4 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/db_structure.xml b/db_structure.xml
index aa0916264c9..7c67ca78f4e 100644
--- a/db_structure.xml
+++ b/db_structure.xml
@@ -189,6 +189,14 @@
 				<length>4</length>
 			</field>
 
+			<field>
+				<name>etag</name>
+				<type>text</type>
+				<default></default>
+				<notnull>true</notnull>
+				<length>250</length>
+			</field>
+
 			<index>
 				<name>storage_path_hash</name>
 				<unique>true</unique>
diff --git a/lib/files/cache/cache.php b/lib/files/cache/cache.php
index 3ebae9baa5d..d105f865ebd 100644
--- a/lib/files/cache/cache.php
+++ b/lib/files/cache/cache.php
@@ -76,7 +76,7 @@ class Cache {
 			$params = array($file);
 		}
 		$query = \OC_DB::prepare(
-			'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`
+			'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag`
 			 FROM `*PREFIX*filecache` ' . $where);
 		$result = $query->execute($params);
 		$data = $result->fetchRow();
@@ -107,7 +107,7 @@ class Cache {
 		$fileId = $this->getId($folder);
 		if ($fileId > -1) {
 			$query = \OC_DB::prepare(
-				'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`
+				'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag`
 			 	 FROM `*PREFIX*filecache` WHERE parent = ? ORDER BY `name` ASC');
 			$result = $query->execute(array($fileId));
 			return $result->fetchAll();
@@ -180,7 +180,7 @@ class Cache {
 	 * @return array
 	 */
 	static function buildParts(array $data) {
-		$fields = array('path', 'parent', 'name', 'mimetype', 'size', 'mtime', 'encrypted');
+		$fields = array('path', 'parent', 'name', 'mimetype', 'size', 'mtime', 'encrypted', 'etag');
 
 		$params = array();
 		$queryParts = array();
@@ -333,7 +333,7 @@ class Cache {
 	 */
 	public function search($pattern) {
 		$query = \OC_DB::prepare('
-			SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`
+			SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag`
 			FROM `*PREFIX*filecache` WHERE `name` LIKE ? AND `storage` = ?'
 		);
 		$result = $query->execute(array($pattern, $this->numericId));
@@ -357,7 +357,7 @@ class Cache {
 			$where = '`mimepart` = ?';
 		}
 		$query = \OC_DB::prepare('
-			SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`
+			SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag`
 			FROM `*PREFIX*filecache` WHERE ' . $where . ' AND `storage` = ?'
 		);
 		$result = $query->execute(array($mimetype, $this->numericId));
diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php
index 4c0ec9617f9..e7bfb1898e1 100644
--- a/lib/files/cache/scanner.php
+++ b/lib/files/cache/scanner.php
@@ -58,6 +58,7 @@ class Scanner {
 			$data['size'] = $this->storage->filesize($path);
 			$data['permissions'] = $this->storage->getPermissions($path);
 		}
+		$data['etag'] = $this->storage->getETag($path);
 		return $data;
 	}
 
diff --git a/lib/util.php b/lib/util.php
index c5a495234d0..df26a825d1c 100755
--- a/lib/util.php
+++ b/lib/util.php
@@ -74,7 +74,7 @@ class OC_Util {
 	 */
 	public static function getVersion() {
 		// hint: We only can count up. So the internal version number of ownCloud 4.5 will be 4.90.0. This is not visible to the user
-		return array(4,91,04);
+		return array(4,91,05);
 	}
 
 	/**
-- 
GitLab