diff options
author | Gregor Tätzner <gregor@freenet.de> | 2012-08-04 10:31:57 +0200 |
---|---|---|
committer | Gregor Tätzner <gregor@freenet.de> | 2012-08-04 10:31:57 +0200 |
commit | 91d194a5df74ba79e40fb1be8f87d79a506d2c85 (patch) | |
tree | f4c296584c7f06966ddc849c8d66bdf80aea1ddc /lib | |
parent | b22c89c73ddc61eefa414e2e06e4802aa051d392 (diff) |
Polish deleteAll functions. It's not necessary to use sql joins
Diffstat (limited to 'lib')
-rw-r--r-- | lib/feedmapper.php | 14 | ||||
-rw-r--r-- | lib/foldermapper.php | 16 |
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; } |