From d551d3d6abd6baebd5df4b44edaa119d439b4157 Mon Sep 17 00:00:00 2001 From: Seamus Lee Date: Tue, 8 Sep 2020 11:35:40 +1000 Subject: [PATCH] dev/core#1486 Remove Foreign Keys relating to contacts from ACL Cache tables and replace one with an index on contact_id Create index on upgrade --- CRM/ACL/DAO/ACLCache.php | 12 +++++++++--- CRM/Contact/DAO/ACLContactCache.php | 18 +----------------- CRM/Core/BAO/SchemaHandler.php | 4 ++-- CRM/Core/DAO/AllCoreTables.data.php | 10 +++++----- CRM/Upgrade/Incremental/php/FiveThirtyOne.php | 8 ++++++++ xml/schema/ACL/Cache.xml | 6 ++++++ xml/schema/Contact/ACLContactCache.xml | 1 + 7 files changed, 32 insertions(+), 27 deletions(-) diff --git a/CRM/ACL/DAO/ACLCache.php b/CRM/ACL/DAO/ACLCache.php index 671354acb3..4418878c76 100644 --- a/CRM/ACL/DAO/ACLCache.php +++ b/CRM/ACL/DAO/ACLCache.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/ACL/ACLCache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:cec3d7c7aced95902840b72829550156) + * (GenCodeChecksum:7faa5879056a56b463304bd81829afda) */ /** @@ -85,7 +85,6 @@ class CRM_ACL_DAO_ACLCache extends CRM_Core_DAO { public static function getReferenceColumns() { if (!isset(Civi::$statics[__CLASS__]['links'])) { Civi::$statics[__CLASS__]['links'] = static::createReferenceColumns(__CLASS__); - Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'contact_id', 'civicrm_contact', 'id'); Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'acl_id', 'civicrm_acl', 'id'); CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'links_callback', Civi::$statics[__CLASS__]['links']); } @@ -123,7 +122,6 @@ class CRM_ACL_DAO_ACLCache extends CRM_Core_DAO { 'entity' => 'ACLCache', 'bao' => 'CRM_ACL_DAO_ACLCache', 'localizable' => 0, - 'FKClassName' => 'CRM_Contact_DAO_Contact', 'html' => [ 'type' => 'EntityRef', ], @@ -231,6 +229,14 @@ class CRM_ACL_DAO_ACLCache extends CRM_Core_DAO { */ public static function indices($localize = TRUE) { $indices = [ + 'index_contact_id' => [ + 'name' => 'index_contact_id', + 'field' => [ + 0 => 'contact_id', + ], + 'localizable' => FALSE, + 'sig' => 'civicrm_acl_cache::0::contact_id', + ], 'index_acl_id' => [ 'name' => 'index_acl_id', 'field' => [ diff --git a/CRM/Contact/DAO/ACLContactCache.php b/CRM/Contact/DAO/ACLContactCache.php index d5383fbc1d..eb34f36000 100644 --- a/CRM/Contact/DAO/ACLContactCache.php +++ b/CRM/Contact/DAO/ACLContactCache.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/ACLContactCache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ff86d1eed99d09ea6768d93b3cc39973) + * (GenCodeChecksum:4eaf1e99ce247c430fc280cc6ce68538) */ /** @@ -76,21 +76,6 @@ class CRM_Contact_DAO_ACLContactCache extends CRM_Core_DAO { return $plural ? ts('ACLContact Caches') : ts('ACLContact Cache'); } - /** - * Returns foreign keys and entity references. - * - * @return array - * [CRM_Core_Reference_Interface] - */ - public static function getReferenceColumns() { - if (!isset(Civi::$statics[__CLASS__]['links'])) { - Civi::$statics[__CLASS__]['links'] = static::createReferenceColumns(__CLASS__); - Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'contact_id', 'civicrm_contact', 'id'); - CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'links_callback', Civi::$statics[__CLASS__]['links']); - } - return Civi::$statics[__CLASS__]['links']; - } - /** * Returns all the column names of this table * @@ -135,7 +120,6 @@ class CRM_Contact_DAO_ACLContactCache extends CRM_Core_DAO { 'entity' => 'ACLContactCache', 'bao' => 'CRM_Contact_DAO_ACLContactCache', 'localizable' => 0, - 'FKClassName' => 'CRM_Contact_DAO_Contact', 'add' => '3.1', ], 'operation' => [ diff --git a/CRM/Core/BAO/SchemaHandler.php b/CRM/Core/BAO/SchemaHandler.php index a6c9845a22..5a8d4fa93f 100644 --- a/CRM/Core/BAO/SchemaHandler.php +++ b/CRM/Core/BAO/SchemaHandler.php @@ -365,9 +365,9 @@ ADD UNIQUE INDEX `unique_entity_id` ( `entity_id` )"; * * @param $tables * Tables to create index for in the format: - * array('civicrm_entity_table' => 'entity_id') + * ['civicrm_entity_table' => ['entity_id']] * OR - * array('civicrm_entity_table' => array('entity_id', 'entity_table')) + * array['civicrm_entity_table' => array['entity_id', 'entity_table']] * The latter will create a combined index on the 2 keys (in order). * * Side note - when creating combined indexes the one with the most variation diff --git a/CRM/Core/DAO/AllCoreTables.data.php b/CRM/Core/DAO/AllCoreTables.data.php index fcf35a9eed..fdbda3a704 100644 --- a/CRM/Core/DAO/AllCoreTables.data.php +++ b/CRM/Core/DAO/AllCoreTables.data.php @@ -77,6 +77,11 @@ return [ 'class' => 'CRM_ACL_DAO_ACL', 'table' => 'civicrm_acl', ], + 'CRM_ACL_DAO_ACLCache' => [ + 'name' => 'ACLCache', + 'class' => 'CRM_ACL_DAO_ACLCache', + 'table' => 'civicrm_acl_cache', + ], 'CRM_ACL_DAO_EntityRole' => [ 'name' => 'EntityRole', 'class' => 'CRM_ACL_DAO_EntityRole', @@ -392,11 +397,6 @@ return [ 'class' => 'CRM_Core_DAO_StatusPreference', 'table' => 'civicrm_status_pref', ], - 'CRM_ACL_DAO_ACLCache' => [ - 'name' => 'ACLCache', - 'class' => 'CRM_ACL_DAO_ACLCache', - 'table' => 'civicrm_acl_cache', - ], 'CRM_Contact_DAO_Group' => [ 'name' => 'Group', 'class' => 'CRM_Contact_DAO_Group', diff --git a/CRM/Upgrade/Incremental/php/FiveThirtyOne.php b/CRM/Upgrade/Incremental/php/FiveThirtyOne.php index 50c35a60e8..0f4ba135eb 100644 --- a/CRM/Upgrade/Incremental/php/FiveThirtyOne.php +++ b/CRM/Upgrade/Incremental/php/FiveThirtyOne.php @@ -73,6 +73,7 @@ class CRM_Upgrade_Incremental_php_FiveThirtyOne extends CRM_Upgrade_Incremental_ public function upgrade_5_31_alpha1($rev) { $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev); $this->addTask('Remove Eway Single Currency Payment Processor type if not used or install the new extension for it', 'enableEwaySingleExtension'); + $this->addTask('dev/core#1486 Remove FKs from ACL Cache tables', 'removeFKsFromACLCacheTables'); } public static function enableEwaySingleExtension(CRM_Queue_TaskContext $ctx) { @@ -106,4 +107,11 @@ class CRM_Upgrade_Incremental_php_FiveThirtyOne extends CRM_Upgrade_Incremental_ return TRUE; } + public static function removeFKsFromACLCacheTables(CRM_Queue_TaskContext $ctx) { + CRM_Core_BAO_SchemaHandler::safeRemoveFK('civicrm_acl_contact_cache', 'FK_civicrm_acl_contact_cache_contact_id'); + CRM_Core_BAO_SchemaHandler::safeRemoveFK('civicrm_acl_cache', 'FK_civicrm_acl_cache_contact_id'); + CRM_Core_BAO_SchemaHandler::createIndexes(['civicrm_acl_cache' => ['contact_id']]); + return TRUE; + } + } diff --git a/xml/schema/ACL/Cache.xml b/xml/schema/ACL/Cache.xml index 869eadb961..8b54897737 100644 --- a/xml/schema/ACL/Cache.xml +++ b/xml/schema/ACL/Cache.xml @@ -33,8 +33,14 @@ civicrm_contact
id 1.6 + 5.31 CASCADE + + index_contact_id + contact_id + 5.31 + acl_id Cache ACL diff --git a/xml/schema/Contact/ACLContactCache.xml b/xml/schema/Contact/ACLContactCache.xml index 450b56b693..75603bdf57 100644 --- a/xml/schema/Contact/ACLContactCache.xml +++ b/xml/schema/Contact/ACLContactCache.xml @@ -38,6 +38,7 @@ civicrm_contact
id 3.1 + 5.31 CASCADE -- 2.25.1