Поиск:

Ответ в темуСоздание новой темы Создание опроса
> mysql4-rollback, Откатываем изменения 
:(
    Опции темы
awers
Дата 14.11.2009, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: нет
Всего: 31



Собственно с rollback`ом дела обстоят немного хуже чем с install and upgrade. Разработчики Magento видимо планировали написать rollback и идея заглохла либо эту идею реализовали только в Enterprise версии системы. Но это не беда. Собственно я предлагаю немножко модифицировать файл /app/code/core/Mage/Core/Model/Resource/Setup.php:

Находим функцию "_getModifySqlFiles" 
Код

protected function _getModifySqlFiles($actionType, $fromVersion, $toVersion, $arrFiles)
    {
        $arrRes = array();

        switch ($actionType) {
            case 'install':
                uksort($arrFiles, 'version_compare');
                foreach ($arrFiles as $version => $file) {
                    if (version_compare($version, $toVersion)!==self::VERSION_COMPARE_GREATER) {
                        $arrRes[0] = array('toVersion'=>$version, 'fileName'=>$file);
                    }
                }
                break;

            case 'upgrade':
                uksort($arrFiles, 'version_compare');
                foreach ($arrFiles as $version => $file) {
                    $version_info = explode('-', $version);

                    // In array must be 2 elements: 0 => version from, 1 => version to
                    if (count($version_info)!=2) {
                        break;
                    }
                    $infoFrom = $version_info[0];
                    $infoTo   = $version_info[1];
                    if (version_compare($infoFrom, $fromVersion)!==self::VERSION_COMPARE_LOWER
                        && version_compare($infoTo, $toVersion)!==self::VERSION_COMPARE_GREATER) {
                        $arrRes[] = array('toVersion'=>$infoTo, 'fileName'=>$file);
                    }
                }
                break;
            case 'rollback':
            case 'uninstall':
                break;
        }
        return $arrRes;
    }


И заменяем case 'rollback' на следующее:
Код

        /**
         * Added case for follback action
         * @author Awers
         * @date 05/11/2009
         */
            case 'rollback':
        uksort($arrFiles, 'version_compare');
        krsort($arrFiles);
        foreach ($arrFiles as $version => $file) {
            $version_info = explode('-', $version);
            if (count($version_info)!=2) {
                break;
            }
            $infoFrom = $version_info[0];
            $infoTo   = $version_info[1];
            if (version_compare($infoFrom, $fromVersion)!==self::VERSION_COMPARE_LOWER
                && version_compare($infoTo, $toVersion)!==self::VERSION_COMPARE_GREATER) {
                    $arrRes[] = array('toVersion'=>$infoTo, 'fileName'=>$file);
                }
        }
                break;


Далее, всё что нам остаётся - юзать файлы mysql4-rollback-major-minor.php где major это версия с какой хотим откатиться и minor это на какую. 
Rollback работает по аналогии с upgrade, т.е. строит массив файлов и поочерёдно выполняет их. Для того что бы всё это выполнялось в нужном порядке, я добавил krsort($arrFiles);

Добавлено через 10 минут и 55 секунд
Список функций можно найти тут: http://forum.vingrad.ru/forum/topic-280106.html
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | sql | Следующая тема »


 




[ Время генерации скрипта: 0.0768 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.