Как я могу найти все изменения схемы базы данных, внесенные при обновлении основной версии CiviCRM?


Я использую CiviCRM с Drupal. При обновлении сайта до новой основной версии CiviCRM очень полезно знать все изменения схемы базы данных, внесенные в новую версию, чтобы любой пользовательский код, ссылающийся на поля базы данных, мог быть соответствующим образом изменен.

В качестве примера можно привести civicrm_contribution_recur.next_sched_contribution ->next_sched_contribution_date в 4.3 -> 4.4 .

"Вы не должны напрямую обращаться к полям базы данных, вы должны использовать API CiviCRM", я слышу, как кто-то говорит. Часто это предпочтительный подход, но даже в этом случае API v3 очень тесно связан со структурой базы данных, и поля, возвращаемые вызовом API, отражают имена полей базы данных, поэтому код все равно потребуется изменить.

Действительно полезным ресурсом для CiviCRM был бы эквивалент Преобразования n.x модулей Drupal в (n+1).x документация.

Author: davejenx, 2014-11-06

4 answers

Один из способов сделать это - просмотреть каталог CRM/Upgrade/в новой версии в поисках изменений схемы. Однако они распределены по нескольким файлам, в зависимости от того, в какой альфа- или бета-версии было внесено изменение. Например, в этот файл было внесено изменение next_sched_contribution_date:

Civicrm/CRM/Обновление/Инкрементное/sql/4.4.alpha1.mysql.tpl

 4
Author: davejenx, 2014-11-06 11:30:21

Более простой способ сделать это с чисто структурной точки зрения - использовать инструмент сравнения схем mysql, что-то вроде:

Http://adamspiers.org/computing/mysqldiff/

Однако это может не дать вам всех изменений, но я подозреваю, что вы уловите большинство изменений. Намного лучше сделать это автоматизированным способом, IMO:)

 4
Author: Donald Lobo, 2014-11-06 14:58:39

Другим вариантом было бы различать xml-схему между версиями. Файлы XML-схемы не поставляются в tar.gz релизы, только в git, так что это не совсем самый удобный для пользователя метод, но он может стать хорошей отправной точкой.

Вы также можете попробовать:

git log -w -p tag1..tag2 xml/schema

Например:

git log -w -p 4.4.5..4.5.2 xml/schema

Не идеальный, но полупонятный.

 4
Author: bgm, 2014-11-10 17:19:12

Теперь я нашел жизнеспособный подход к выявлению изменений, используя mysqldbcompare. Я добавил пару страниц в Вики CiviCRM в разделе Ресурсы разработчика -> Справочные листы -> Ссылка на базу данных:

Изменения схемы базы данных: CiviCRM 4.4 до 4.5

Изменения схемы базы данных: CiviCRM 4.5 до 4.6

Обратите внимание, что в настоящее время существует сайт обмена стеками CiviCRM, находящийся в стадии бета-тестирования. Должен ли этот вопрос двигаться там?

 2
Author: davejenx, 2017-04-13 12:53:12