X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FCore%2FBAO%2FCustomValueTable.php;h=c25baac556bdd74b4f3d8bb96ddb97002a9c44be;hb=8733c3b38ce2378ce7581cea13b821e51f6a96e8;hp=9740318b97f10cdc1066bc6feaef27289c505817;hpb=8124c8d9c3188e921626b57dee7cfca0549beb4a;p=civicrm-core.git diff --git a/CRM/Core/BAO/CustomValueTable.php b/CRM/Core/BAO/CustomValueTable.php index 9740318b97..c25baac556 100644 --- a/CRM/Core/BAO/CustomValueTable.php +++ b/CRM/Core/BAO/CustomValueTable.php @@ -36,10 +36,15 @@ class CRM_Core_BAO_CustomValueTable { /** * @param array $customParams + * @param string $parentOperation Operation being taken on the parent entity. + * If we know the parent entity is doing an insert we can skip the + * ON DUPLICATE UPDATE - which improves performance and reduces deadlocks. + * - edit + * - create * * @throws Exception */ - public static function create(&$customParams) { + public static function create($customParams, $parentOperation = NULL) { if (empty($customParams) || !is_array($customParams) ) { @@ -176,7 +181,6 @@ class CRM_Core_BAO_CustomValueTable { $entityFileDAO->entity_id = $field['entity_id']; $entityFileDAO->file_id = $field['file_id']; $entityFileDAO->save(); - $entityFileDAO->free(); $value = $field['file_id']; $type = 'String'; break; @@ -257,7 +261,7 @@ class CRM_Core_BAO_CustomValueTable { $fieldValues = implode(',', array_values($set)); $query = "$sqlOP ( $fieldNames ) VALUES ( $fieldValues )"; // for multiple values we dont do on duplicate key update - if (!$isMultiple) { + if (!$isMultiple && $parentOperation !== 'create') { $query .= " ON DUPLICATE KEY UPDATE $setClause"; } } @@ -338,8 +342,13 @@ class CRM_Core_BAO_CustomValueTable { * @param array $params * @param $entityTable * @param int $entityID + * @param string $parentOperation Operation being taken on the parent entity. + * If we know the parent entity is doing an insert we can skip the + * ON DUPLICATE UPDATE - which improves performance and reduces deadlocks. + * - edit + * - create */ - public static function store(&$params, $entityTable, $entityID) { + public static function store($params, $entityTable, $entityID, $parentOperation = NULL) { $cvParams = []; foreach ($params as $fieldID => $param) { foreach ($param as $index => $customValue) { @@ -376,7 +385,7 @@ class CRM_Core_BAO_CustomValueTable { } } if (!empty($cvParams)) { - self::create($cvParams); + self::create($cvParams, $parentOperation); } }