Mapper: use md5 hashes for database indexes

indexing the full path exeeds the maximum index length for MySQL
This commit is contained in:
Robin Appelman 2013-02-10 11:49:37 +01:00
parent b44c18d164
commit 0c05244f8b
2 changed files with 24 additions and 8 deletions

View File

@ -108,6 +108,14 @@
<length>512</length>
</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>
@ -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>

View File

@ -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) {