summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2010-09-28 02:34:42 +0000
committerDries Buytaert <dries@buytaert.net>2010-09-28 02:34:42 +0000
commit7874654909fcbe0c3dad8f5533a2db19b8dd1c94 (patch)
tree1a4f9fa008ffd07acb6c3d96410f6d949dd619df
parent45bca33bc2dd42e6a5a30956f6577e8df25c72c4 (diff)
downloadbrdo-7874654909fcbe0c3dad8f5533a2db19b8dd1c94.tar.gz
brdo-7874654909fcbe0c3dad8f5533a2db19b8dd1c94.tar.bz2
- Patch #924554 by quicksketch, paul.lovvik: an exception is being thrown in the file_usage_delete() function if the corresponding file is not in the 'file_usage()' table.
-rw-r--r--includes/file.inc6
-rw-r--r--modules/simpletest/tests/file.test17
2 files changed, 16 insertions, 7 deletions
diff --git a/includes/file.inc b/includes/file.inc
index 1d4343da0..769493a61 100644
--- a/includes/file.inc
+++ b/includes/file.inc
@@ -661,7 +661,7 @@ function file_usage_delete(stdClass $file, $module, $type = NULL, $id = NULL, $c
$result = $query->execute();
// If the row has more than the specified count decrement it by that number.
- if (!$result) {
+ if (!$result && $count > 0) {
$query = db_update('file_usage')
->condition('module', $module)
->condition('fid', $file->fid);
@@ -670,9 +670,7 @@ function file_usage_delete(stdClass $file, $module, $type = NULL, $id = NULL, $c
->condition('type', $type)
->condition('id', $id);
}
- if ($count) {
- $query->expression('count', 'count - :count', array(':count' => $count));
- }
+ $query->expression('count', 'count - :count', array(':count' => $count));
$query->execute();
}
}
diff --git a/modules/simpletest/tests/file.test b/modules/simpletest/tests/file.test
index 55fc1deb7..94a65938e 100644
--- a/modules/simpletest/tests/file.test
+++ b/modules/simpletest/tests/file.test
@@ -1971,25 +1971,36 @@ class FileUsageTest extends FileTestCase {
'module' => 'testing',
'type' => 'bar',
'id' => 2,
- 'count' => 2
+ 'count' => 3,
))
->execute();
+ // Normal decrement.
file_usage_delete($file, 'testing', 'bar', 2);
$count = db_select('file_usage', 'f')
->fields('f', array('count'))
->condition('f.fid', $file->fid)
->execute()
->fetchField();
- $this->assertEqual(1, $count, t('The count was decremented correctly.'));
+ $this->assertEqual(2, $count, t('The count was decremented correctly.'));
+
+ // Multiple decrement and removal.
+ file_usage_delete($file, 'testing', 'bar', 2, 2);
+ $count = db_select('file_usage', 'f')
+ ->fields('f', array('count'))
+ ->condition('f.fid', $file->fid)
+ ->execute()
+ ->fetchField();
+ $this->assertIdentical(FALSE, $count, t('The count was removed entirely when empty.'));
+ // Non-existent decrement.
file_usage_delete($file, 'testing', 'bar', 2);
$count = db_select('file_usage', 'f')
->fields('f', array('count'))
->condition('f.fid', $file->fid)
->execute()
->fetchField();
- $this->assertEqual(0, $count, t('The count was decremented correctly.'));
+ $this->assertIdentical(FALSE, $count, t('Decrementing non-exist record complete.'));
}
}