X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FLogging%2FSchema.php;h=9abdd925b6075a153af94e909c1ec5f3c145cdcc;hb=f15045413c7fbecd5a60fde626a3f1af14816a6f;hp=877be2dad162fafbe664af121c99e4476aee7881;hpb=adc13f865ee7ced5d485e801528f2481fb6da0b0;p=civicrm-core.git diff --git a/CRM/Logging/Schema.php b/CRM/Logging/Schema.php index 877be2dad1..9abdd925b6 100644 --- a/CRM/Logging/Schema.php +++ b/CRM/Logging/Schema.php @@ -207,7 +207,7 @@ AND TABLE_NAME LIKE 'log_civicrm_%' $this->fixSchemaDifferencesForALL(); } // invoke the meta trigger creation call - CRM_Core_DAO::triggerRebuild(); + CRM_Core_DAO::triggerRebuild(NULL, TRUE); } /** @@ -245,7 +245,7 @@ AND TABLE_NAME LIKE 'log_civicrm_%' // for any obsolete columns (not null) we just make the column nullable. if (!empty($cols['OBSOLETE'])) { - $create = $this->_getCreateQuery("log_{$table}"); + $create = $this->_getCreateQuery("`{$this->db}`.log_{$table}"); foreach ($cols['OBSOLETE'] as $col) { $line = $this->_getColumnQuery($col, $create); // This is just going to make a not null column to nullable @@ -280,7 +280,8 @@ AND TABLE_NAME LIKE 'log_civicrm_%' foreach ($this->tables as $table) { if (empty($this->logs[$table])) { $this->createLogTableFor($table); - } else { + } + else { $diffs[$table] = $this->columnsWithDiffSpecs($table, "log_$table"); } } @@ -339,12 +340,12 @@ AND TABLE_NAME LIKE 'log_civicrm_%' /** * Get an array of column names of the given table. */ - private function columnsOf($table) { + private function columnsOf($table, $force = FALSE) { static $columnsOf = array(); $from = (substr($table, 0, 4) == 'log_') ? "`{$this->db}`.$table" : $table; - if (!isset($columnsOf[$table])) { + if (!isset($columnsOf[$table]) || $force) { CRM_Core_Error::ignoreException(); $dao = CRM_Core_DAO::executeQuery("SHOW COLUMNS FROM $from"); CRM_Core_Error::setCallback(); @@ -412,6 +413,10 @@ WHERE table_schema IN ('{$this->db}', '{$civiDB}')"; // NOTE: we consider only those columns for modifications where there is a spec change, and that the column definition // wasn't deliberately modified by fixTimeStampAndNotNullSQL() method. foreach ($civiTableSpecs as $col => $colSpecs) { + if ( !is_array($logTableSpecs[$col]) ) { + $logTableSpecs[$col] = array(); + } + $specDiff = array_diff($civiTableSpecs[$col], $logTableSpecs[$col]); if (!empty($specDiff) && $col != 'id' && !array_key_exists($col, $diff['ADD'])) { // ignore 'id' column for any spec changes, to avoid any auto-increment mysql errors @@ -530,7 +535,7 @@ COLS; return (bool) CRM_Core_DAO::singleValueQuery("SHOW TRIGGERS LIKE 'civicrm_contact'"); } - function triggerInfo(&$info, $tableName = NULL) { + function triggerInfo(&$info, $tableName = NULL, $force = FALSE) { // check if we have logging enabled $config =& CRM_Core_Config::singleton(); if (!$config->logging) { @@ -550,7 +555,7 @@ COLS; // logging is enabled, so now lets create the trigger info tables foreach ($tableNames as $table) { - $columns = $this->columnsOf($table); + $columns = $this->columnsOf($table, $force); // only do the change if any data has changed $cond = array( );