summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2013-02-10 11:49:37 +0100
committerRobin Appelman <icewind@owncloud.com>2013-02-10 11:49:37 +0100
commit0c05244f8bdc083f54b01cbde05c3df7bd97e618 (patch)
tree1a0d5323f7169cbbcb6b608427ef15b904b28864
parentb44c18d1640f4ac395eecbad5a33dcb9af1d4038 (diff)
downloadnextcloud-server-0c05244f8bdc083f54b01cbde05c3df7bd97e618.tar.gz
nextcloud-server-0c05244f8bdc083f54b01cbde05c3df7bd97e618.zip
Mapper: use md5 hashes for database indexes
indexing the full path exeeds the maximum index length for MySQL
-rw-r--r--db_structure.xml20
-rw-r--r--lib/files/mapper.php12
2 files changed, 24 insertions, 8 deletions
diff --git a/db_structure.xml b/db_structure.xml
index fc7f1082ffa..f353ae08098 100644
--- a/db_structure.xml
+++ b/db_structure.xml
@@ -109,6 +109,14 @@
</field>
<field>
+ <name>logic_path_hash</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>32</length>
+ </field>
+
+ <field>
<name>physic_path</name>
<type>text</type>
<default></default>
@@ -116,11 +124,19 @@
<length>512</length>
</field>
+ <field>
+ <name>physic_path_hash</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>32</length>
+ </field>
+
<index>
<name>file_map_lp_index</name>
<unique>true</unique>
<field>
- <name>logic_path</name>
+ <name>logic_path_hash</name>
<sorting>ascending</sorting>
</field>
</index>
@@ -129,7 +145,7 @@
<name>file_map_pp_index</name>
<unique>true</unique>
<field>
- <name>physic_path</name>
+ <name>physic_path_hash</name>
<sorting>ascending</sorting>
</field>
</index>
diff --git a/lib/files/mapper.php b/lib/files/mapper.php
index 90e4e1ca669..71b665e49bb 100644
--- a/lib/files/mapper.php
+++ b/lib/files/mapper.php
@@ -114,8 +114,8 @@ class Mapper
private function resolveLogicPath($logicPath) {
$logicPath = $this->stripLast($logicPath);
- $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `logic_path` = ?');
- $result = $query->execute(array($logicPath));
+ $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `logic_path_hash` = ?');
+ $result = $query->execute(array(md5($logicPath)));
$result = $result->fetchRow();
return $result['physic_path'];
@@ -123,8 +123,8 @@ class Mapper
private function resolvePhysicalPath($physicalPath) {
$physicalPath = $this->stripLast($physicalPath);
- $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `physic_path` = ?');
- $result = $query->execute(array($physicalPath));
+ $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `physic_path_hash` = ?');
+ $result = $query->execute(array(md5($physicalPath)));
$result = $result->fetchRow();
return $result['logic_path'];
@@ -151,8 +151,8 @@ class Mapper
}
private function insert($logicPath, $physicalPath) {
- $query = \OC_DB::prepare('INSERT INTO `*PREFIX*file_map`(`logic_path`,`physic_path`) VALUES(?,?)');
- $query->execute(array($logicPath, $physicalPath));
+ $query = \OC_DB::prepare('INSERT INTO `*PREFIX*file_map`(`logic_path`, `physic_path`, `logic_path_hash`, `physic_path_hash`) VALUES(?, ?, ?, ?)');
+ $query->execute(array($logicPath, $physicalPath, md5($logicPath), md5($physicalPath)));
}
private function slugifyPath($path, $index=null) {