Skip to content

Commit

Permalink
fix update to remove shares where file doesn't exist on postgres
Browse files Browse the repository at this point in the history
Without patch, breaks with: Failed to upgrade "files_sharing".
Exception="SQLSTATE[22P02]: Invalid text representation: 7 ERROR:
invalid input syntax for integer: "5,179""

See: #5758

removing unnecessary cruft - no parameter is set, none to pass.

#5758

removing subquery, making more readable

See: #6016 (comment)

parameters to sql calls should be arrays

#6016

boosting version to ensure fix gets executed

properly escaping the sql select statement

removing extraneous closing paren.
  • Loading branch information
jmcclelland authored and MorrisJobke committed Mar 13, 2014
1 parent 9fa9c79 commit d58fda7
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 15 deletions.
27 changes: 13 additions & 14 deletions apps/files_sharing/appinfo/update.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,19 +71,18 @@
}

// clean up oc_share table from files which are no longer exists
if (version_compare($installedVersion, '0.3.5', '<')) {
if (version_compare($installedVersion, '0.3.5.6', '<')) {
// delete all shares where the original file no longer exists
$findShares = \OC_DB::prepare('SELECT `*PREFIX*share`.`id` ' .
'FROM `*PREFIX*share` LEFT JOIN `*PREFIX*filecache` ON `file_source` = `*PREFIX*filecache`.`fileid` ' .
'WHERE `*PREFIX*filecache`.`fileid` IS NULL AND `*PREFIX*share`.`item_type` IN (\'file\', \'folder\')');
$sharesFound = $findShares->execute(array())->fetchAll();

// get all shares where the original file no longer exists
$findShares = \OC_DB::prepare('SELECT `file_source` FROM `*PREFIX*share` LEFT JOIN `*PREFIX*filecache` ON `file_source` = `*PREFIX*filecache`.`fileid` WHERE `*PREFIX*filecache`.`fileid` IS NULL AND `*PREFIX*share`.`item_type` IN (\'file\', \'folder\')');
$sharesFound = $findShares->execute(array())->fetchAll();

// delete those shares from the oc_share table
if (is_array($sharesFound) && !empty($sharesFound)) {
$delArray = array();
foreach ($sharesFound as $share) {
$delArray[] = $share['file_source'];
}
$removeShares = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `file_source` IN (?)');
$result = $removeShares->execute(array(implode(',', $delArray)));
}
// delete those shares from the oc_share table
if (is_array($sharesFound) && !empty($sharesFound)) {
$removeShares = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `id` = ? ');
foreach ($sharesFound as $share) {
$result = $removeShares->execute(array($share['id']));
}
}
}
2 changes: 1 addition & 1 deletion apps/files_sharing/appinfo/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.3.5
0.3.5.6

0 comments on commit d58fda7

Please sign in to comment.