Как я могу найти все изменения схемы базы данных, внесенные при обновлении основной версии 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 документация.
4 answers
Один из способов сделать это - просмотреть каталог CRM/Upgrade/в новой версии в поисках изменений схемы. Однако они распределены по нескольким файлам, в зависимости от того, в какой альфа- или бета-версии было внесено изменение. Например, в этот файл было внесено изменение next_sched_contribution_date:
Civicrm/CRM/Обновление/Инкрементное/sql/4.4.alpha1.mysql.tpl
Более простой способ сделать это с чисто структурной точки зрения - использовать инструмент сравнения схем mysql, что-то вроде:
Http://adamspiers.org/computing/mysqldiff/
Однако это может не дать вам всех изменений, но я подозреваю, что вы уловите большинство изменений. Намного лучше сделать это автоматизированным способом, IMO:)
Другим вариантом было бы различать 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
Не идеальный, но полупонятный.
Теперь я нашел жизнеспособный подход к выявлению изменений, используя mysqldbcompare. Я добавил пару страниц в Вики CiviCRM в разделе Ресурсы разработчика -> Справочные листы -> Ссылка на базу данных:
Изменения схемы базы данных: CiviCRM 4.4 до 4.5
Изменения схемы базы данных: CiviCRM 4.5 до 4.6
Обратите внимание, что в настоящее время существует сайт обмена стеками CiviCRM, находящийся в стадии бета-тестирования. Должен ли этот вопрос двигаться там?