[REF] final cleanup - call bulkCreate from migrate_utils
authoreileen <emcnaughton@wikimedia.org>
Thu, 4 Jul 2019 01:07:55 +0000 (13:07 +1200)
committereileen <emcnaughton@wikimedia.org>
Thu, 11 Jul 2019 20:13:15 +0000 (08:13 +1200)
This has a test CRM_Utils_Migrate_ImportExportTest although I had trouble running it without switching to
some hard-coding (at least in isolation). This switches the existing bulk create action over to use bulkCreate

CRM/Core/BAO/CustomField.php
CRM/Core/BAO/SchemaHandler.php
CRM/Utils/Migrate/Import.php
tests/phpunit/CRM/Utils/Migrate/ImportExportTest.php

index 4af2b20991ec024b4ba879ec48e8c9c7494e12f7..f6dce2967db19f30d7bed20bfbd6489b8c822273 100644 (file)
@@ -154,7 +154,7 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField {
   public static function create($params) {
     $customField = self::createCustomFieldRecord($params);
     $op = empty($params['id']) ? 'add' : 'modify';
-    self::createField($customField, $op, CRM_Utils_Array::value('triggerRebuild', $params, TRUE));
+    self::createField($customField, $op);
 
     CRM_Utils_Hook::post(($op === 'add' ? 'create' : 'edit'), 'CustomField', $customField->id, $customField);
 
@@ -1692,9 +1692,8 @@ SELECT $columnName
    *
    * @param CRM_Core_DAO_CustomField $field
    * @param string $operation
-   * @param bool $triggerRebuild
    */
-  public static function createField($field, $operation, $triggerRebuild = TRUE) {
+  public static function createField($field, $operation) {
     $sql = str_repeat(' ', 8);
     $tableName = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $field->custom_group_id, 'table_name');
     $sql .= "ALTER TABLE " . $tableName;
@@ -1714,10 +1713,7 @@ SELECT $columnName
       }
     }
 
-    if ($triggerRebuild) {
-      Civi::service('sql_triggers')->rebuild($tableName, TRUE);
-    }
-
+    Civi::service('sql_triggers')->rebuild($tableName, TRUE);
   }
 
   /**
index a8bc7c3da7de32951837faf4ebcb306d3287f255..004907fa127874aad356167f1ea4fbfa134a9a17 100644 (file)
@@ -288,6 +288,8 @@ ALTER TABLE {$tableName}
   }
 
   /**
+   * @deprecated
+   *
    * @param array $params
    * @param bool $indexExist
    * @param bool $triggerRebuild
index 590a924c70546468fed9e2ed2e58276052ad4913..00f5b115d110c55e1f67f3dc09d0f90a02b5fb74 100644 (file)
@@ -363,37 +363,7 @@ AND        v.name = %1
       }
     }
     foreach ($fields_indexed_by_group_id as $group_id => $fields) {
-      $total = count($fields);
-      $count = 0;
-      foreach ($fields as $customFieldXML) {
-        $count++;
-        $customField = new CRM_Core_DAO_CustomField();
-        $customField->custom_group_id = $group_id;
-        $skipStore = FALSE;
-        if (!$this->copyData($customField, $customFieldXML, FALSE, 'label')) {
-          $skipStore = TRUE;
-        }
-
-        if (empty($customField->option_group_id) &&
-          isset($customFieldXML->option_group_name)
-        ) {
-          $customField->option_group_id = $idMap['option_group'][(string ) $customFieldXML->option_group_name];
-        }
-        if ($skipStore) {
-          continue;
-        }
-        $customField->save();
-
-        // Only rebuild the table's trigger on the last field added to avoid un-necessary
-        // and slow rebuilds when adding many fields at the same time.
-        // @todo - call bulkSave instead.
-        $triggerRebuild = FALSE;
-        if ($count == $total) {
-          $triggerRebuild = TRUE;
-        }
-        $indexExist = FALSE;
-        CRM_Core_BAO_CustomField::createField($customField, 'add', $indexExist, $triggerRebuild);
-      }
+      CRM_Core_BAO_CustomField::bulkSave(json_decode(json_encode($fields), TRUE), ['custom_group_id' => $group_id]);
     }
   }
 
index 059e2d985c0ff82168c2711f2dc730d292710626..082a7409eddb0b6ab190612918481e298b48a08c 100644 (file)
@@ -137,7 +137,7 @@ class CRM_Utils_Migrate_ImportExportTest extends CiviUnitTestCase {
       // CustomGroup params
       array(
         'extends' => 'Activity',
-        'extends_entity_column_value' => array(array_search('Meeting', CRM_Core_PseudoConstant::activityType())),
+        'extends_entity_column_value' => [1],
         'title' => 'example',
       ),
       // CustomField params