From 6fa7ddba9a55f7b074a6a526fe0460a6c5331079 Mon Sep 17 00:00:00 2001 From: drigato <denise.rigato@sourcefabric.org> Date: Mon, 28 Jul 2014 16:03:57 -0400 Subject: [PATCH] CC-5896: Store cloud files in separate table, inherited from cc_files Added delete on cascade for cloud files --- .../application/models/airtime/map/CcFilesTableMap.php | 2 +- .../application/models/airtime/map/CloudFileTableMap.php | 4 ++-- airtime_mvc/application/models/airtime/om/BaseCcFiles.php | 7 +++---- .../application/models/airtime/om/BaseCcFilesPeer.php | 3 +++ airtime_mvc/build/schema.xml | 2 +- airtime_mvc/build/sql/schema.sql | 3 ++- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php b/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php index 86a8ff2ab..fa50a21ef 100644 --- a/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php +++ b/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php @@ -120,7 +120,7 @@ class CcFilesTableMap extends TableMap $this->addRelation('FkOwner', 'CcSubjs', RelationMap::MANY_TO_ONE, array('owner_id' => 'id', ), null, null); $this->addRelation('CcSubjsRelatedByDbEditedby', 'CcSubjs', RelationMap::MANY_TO_ONE, array('editedby' => 'id', ), null, null); $this->addRelation('CcMusicDirs', 'CcMusicDirs', RelationMap::MANY_TO_ONE, array('directory' => 'id', ), null, null); - $this->addRelation('CloudFile', 'CloudFile', RelationMap::ONE_TO_MANY, array('id' => 'cc_file_id', ), null, null, 'CloudFiles'); + $this->addRelation('CloudFile', 'CloudFile', RelationMap::ONE_TO_MANY, array('id' => 'cc_file_id', ), 'CASCADE', null, 'CloudFiles'); $this->addRelation('CcShowInstances', 'CcShowInstances', RelationMap::ONE_TO_MANY, array('id' => 'file_id', ), 'CASCADE', null, 'CcShowInstancess'); $this->addRelation('CcPlaylistcontents', 'CcPlaylistcontents', RelationMap::ONE_TO_MANY, array('id' => 'file_id', ), 'CASCADE', null, 'CcPlaylistcontentss'); $this->addRelation('CcBlockcontents', 'CcBlockcontents', RelationMap::ONE_TO_MANY, array('id' => 'file_id', ), 'CASCADE', null, 'CcBlockcontentss'); diff --git a/airtime_mvc/application/models/airtime/map/CloudFileTableMap.php b/airtime_mvc/application/models/airtime/map/CloudFileTableMap.php index 0c25ddfb3..898fc0b79 100644 --- a/airtime_mvc/application/models/airtime/map/CloudFileTableMap.php +++ b/airtime_mvc/application/models/airtime/map/CloudFileTableMap.php @@ -39,7 +39,7 @@ class CloudFileTableMap extends TableMap $this->setUseIdGenerator(true); $this->setPrimaryKeyMethodInfo('cloud_file_id_seq'); // columns - $this->addPrimaryKey('id', 'Id', 'INTEGER', true, null, null); + $this->addPrimaryKey('id', 'DbId', 'INTEGER', true, null, null); $this->addColumn('resource_id', 'ResourceId', 'LONGVARCHAR', true, null, null); $this->addForeignKey('cc_file_id', 'CcFileId', 'INTEGER', 'cc_files', 'id', false, null, null); // validators @@ -50,7 +50,7 @@ class CloudFileTableMap extends TableMap */ public function buildRelations() { - $this->addRelation('CcFiles', 'CcFiles', RelationMap::MANY_TO_ONE, array('cc_file_id' => 'id', ), null, null); + $this->addRelation('CcFiles', 'CcFiles', RelationMap::MANY_TO_ONE, array('cc_file_id' => 'id', ), 'CASCADE', null); } // buildRelations() /** diff --git a/airtime_mvc/application/models/airtime/om/BaseCcFiles.php b/airtime_mvc/application/models/airtime/om/BaseCcFiles.php index 591bfa07e..e10a0946f 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcFiles.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcFiles.php @@ -3405,10 +3405,9 @@ abstract class BaseCcFiles extends BaseObject implements Persistent if ($this->cloudFilesScheduledForDeletion !== null) { if (!$this->cloudFilesScheduledForDeletion->isEmpty()) { - foreach ($this->cloudFilesScheduledForDeletion as $cloudFile) { - // need to save related object because we set the relation to null - $cloudFile->save($con); - } + CloudFileQuery::create() + ->filterByPrimaryKeys($this->cloudFilesScheduledForDeletion->getPrimaryKeys(false)) + ->delete($con); $this->cloudFilesScheduledForDeletion = null; } } diff --git a/airtime_mvc/application/models/airtime/om/BaseCcFilesPeer.php b/airtime_mvc/application/models/airtime/om/BaseCcFilesPeer.php index 5466f9541..c27d654c6 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcFilesPeer.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcFilesPeer.php @@ -700,6 +700,9 @@ abstract class BaseCcFilesPeer */ public static function clearRelatedInstancePool() { + // Invalidate objects in CloudFilePeer instance pool, + // since one or more of them may be deleted by ON DELETE CASCADE/SETNULL rule. + CloudFilePeer::clearInstancePool(); // Invalidate objects in CcShowInstancesPeer instance pool, // since one or more of them may be deleted by ON DELETE CASCADE/SETNULL rule. CcShowInstancesPeer::clearInstancePool(); diff --git a/airtime_mvc/build/schema.xml b/airtime_mvc/build/schema.xml index eb5b0ac14..8ba1c24d9 100644 --- a/airtime_mvc/build/schema.xml +++ b/airtime_mvc/build/schema.xml @@ -103,7 +103,7 @@ <column name="id" phpName="DbId" required="true" primaryKey="true" autoIncrement="true" type="INTEGER"/> <column name="resource_id" phpName="ResourceId" type="LONGVARCHAR" required="true"/> <column name="cc_file_id" type="INTEGER"/> - <foreign-key foreignTable="cc_files"> + <foreign-key foreignTable="cc_files" onDelete="CASCADE"> <reference local="cc_file_id" foreign="id"/> </foreign-key> <behavior name="delegate"> diff --git a/airtime_mvc/build/sql/schema.sql b/airtime_mvc/build/sql/schema.sql index 6925c928a..3c34da910 100644 --- a/airtime_mvc/build/sql/schema.sql +++ b/airtime_mvc/build/sql/schema.sql @@ -694,7 +694,8 @@ ALTER TABLE "cc_files" ADD CONSTRAINT "cc_music_dirs_folder_fkey" ALTER TABLE "cloud_file" ADD CONSTRAINT "cloud_file_FK_1" FOREIGN KEY ("cc_file_id") - REFERENCES "cc_files" ("id"); + REFERENCES "cc_files" ("id") + ON DELETE CASCADE; ALTER TABLE "cc_perms" ADD CONSTRAINT "cc_perms_subj_fkey" FOREIGN KEY ("subj")