summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorGregor Tätzner <gregor@freenet.de>2012-08-04 10:31:57 +0200
committerGregor Tätzner <gregor@freenet.de>2012-08-04 10:31:57 +0200
commit91d194a5df74ba79e40fb1be8f87d79a506d2c85 (patch)
treef4c296584c7f06966ddc849c8d66bdf80aea1ddc /lib
parentb22c89c73ddc61eefa414e2e06e4802aa051d392 (diff)
Polish deleteAll functions. It's not necessary to use sql joins
Diffstat (limited to 'lib')
-rw-r--r--lib/feedmapper.php14
-rw-r--r--lib/foldermapper.php16
2 files changed, 13 insertions, 17 deletions
diff --git a/lib/feedmapper.php b/lib/feedmapper.php
index 4e3987a17..6461b6bf7 100644
--- a/lib/feedmapper.php
+++ b/lib/feedmapper.php
@@ -213,27 +213,19 @@ class OC_News_FeedMapper {
return deleteById($id);
}
- //it's more complicated tan this...recursive delete, or delete with a join
public function deleteAll($folderid){
if ($folderid == null) {
return false;
}
- // delete items
- $itemMapper = new OC_News_ItemMapper();
- $stmt = OCP\DB::prepare('SELECT ' . self::tableName . '.id FROM ' . self::tableName .' INNER JOIN ' . OC_News_ItemMapper::tableName .
- ' ON ' . self::tableName . '.id = ' . OC_News_ItemMapper::tableName . '.feed_id WHERE folder_id = ?');
+ $stmt = OCP\DB::prepare('SELECT id FROM ' . self::tableName . ' WHERE folder_id = ?');
$result = $stmt->execute(array($folderid));
while ($row = $result->fetchRow()) {
- $itemMapper->deleteAll($row['id']);
+ if(!self::deleteById($row['id']))
+ return false;
}
- // delete feeds
- $stmt = OCP\DB::prepare('DELETE FROM ' . self::tableName .' WHERE folder_id = ?');
- $result = $stmt->execute(array($folderid));
- //TODO: handle the value that the execute returns
-
return true;
}
} \ No newline at end of file
diff --git a/lib/foldermapper.php b/lib/foldermapper.php
index 1e71fea90..91c005bc9 100644
--- a/lib/foldermapper.php
+++ b/lib/foldermapper.php
@@ -129,22 +129,26 @@ class OC_News_FolderMapper {
return deleteById(folderid);
}
- //TODO: replace it with a DELETE INNER JOIN operation
- //Note Brumm: probably not possible, I've tried:
- // 'DELETE FROM ' . self::tableName .' INNER JOIN ' . OC_News_FeedMapper::tableName .
- // ' ON (' . self::tableName . '.id = ' . OC_News_FeedMapper::tableName . '.folder_id )')
public function deleteById($folderid){
if ($folderid == null){
return false;
}
- $stmt = OCP\DB::prepare('DELETE FROM ' . self::tableName .' WHERE id = ?');
+ // delete child folders
+ $stmt = OCP\DB::prepare('SELECT id FROM ' . self::tableName .' WHERE parent_id = ?');
+ $result = $stmt->execute(array($folderid));
+ while ($row = $result->fetchRow()) {
+ if (!self::deleteById($row['id']))
+ return false;
+ }
+ $stmt = OCP\DB::prepare('DELETE FROM ' . self::tableName .' WHERE id = ?');
$result = $stmt->execute(array($folderid));
$feedMapper = new OC_News_FeedMapper();
//TODO: handle the value that the execute returns
- $feedMapper->deleteAll($folderid);
+ if(!$feedMapper->deleteAll($folderid))
+ return false;
return true;
}