CRM-18464 use safe drop foreign key function to resolve upgrade error and also drop...
authorSeamus Lee <seamuslee001@gmail.com>
Sat, 14 Jan 2017 06:40:06 +0000 (17:40 +1100)
committerSeamus Lee <seamuslee001@gmail.com>
Mon, 6 Feb 2017 20:25:15 +0000 (20:25 +0000)
CRM/Upgrade/Incremental/php/FourSeven.php
CRM/Upgrade/Incremental/sql/4.7.alpha1.mysql.tpl

index a1a3c58152a8edc27272882bd483cbd777a42d45..963908f00a2207466c3a05e2a68839f12b9f7c13 100644 (file)
@@ -119,6 +119,7 @@ class CRM_Upgrade_Incremental_php_FourSeven extends CRM_Upgrade_Incremental_Base
    * @param string $rev
    */
   public function upgrade_4_7_alpha1($rev) {
+    $this->addTask('Drop action scheudle mapping foreign key', 'dropActionScheudleMappingForeignKey');
     $this->addTask('Migrate \'on behalf of\' information to module_data', 'migrateOnBehalfOfInfo');
     $this->addTask(ts('Upgrade DB to %1: SQL', array(1 => $rev)), 'runSql', $rev);
     $this->addTask(ts('Migrate Settings to %1', array(1 => $rev)), 'migrateSettings', $rev);
@@ -780,6 +781,21 @@ FROM `civicrm_dashboard_contact` JOIN `civicrm_contact` WHERE civicrm_dashboard_
     return TRUE;
   }
 
+  /**
+   * CRM-18464 Check if Foreign key exists and also drop any index of same name accidentially created.
+   *
+   * @param \CRM_Queue_TaskContext $ctx
+   *
+   * @return bool
+   */
+  public static function dropActionScheudleMappingForeignKey(CRM_Queue_TaskContext $ctx) {
+    CRM_Core_BAO_SchemaHandler::safeRemoveFK('civicrm_action_schedule', 'FK_civicrm_action_schedule_mapping_id');
+    if (CRM_Core_BAO_SchemaHandler::checkIfIndexExists('civicrm_action_schedule', 'FK_civicrm_action_schedule_mapping_id')) {
+      CRM_Core_DAO::executeQuery("ALTER TABLE civicrm_action_schedule DROP INDEX FK_civicrm_action_schedule_mapping_id");
+    }
+    return TRUE;
+  }
+
   /**
    * CRM-18345 Don't delete mailing data on email/phone deletion
    * Implemented here in CRM-18526
index 7ef1d6af18e2f8e651a06593c02629d0cc9baf57..df1ad7d5c76826743d194d361588ba90e8838457 100644 (file)
@@ -3,7 +3,6 @@
 -- Add new columns for multilingual purpose
 ALTER TABLE `civicrm_action_schedule` ADD COLUMN `filter_contact_language` varchar(128) DEFAULT NULL COMMENT 'Used for multilingual installation';
 ALTER TABLE `civicrm_action_schedule` ADD COLUMN `communication_language` varchar(8) DEFAULT NULL COMMENT 'Used for multilingual installation';
-ALTER TABLE `civicrm_action_schedule` DROP FOREIGN KEY `FK_civicrm_action_schedule_mapping_id`;
 ALTER TABLE `civicrm_action_schedule` MODIFY COLUMN mapping_id varchar(64);
 -- Q: Should we validate that local civicrm_action_mapping records have expected IDs?