Skip to content

Ru:1.0to1.1

Alexey Denisov edited this page Feb 4, 2014 · 20 revisions

Миграция с 1.0 на 1.1

Сейчас 1.1 это не мастер но он в данный момент почти дублирует функционал мастера. Мигрировав на 1.1 перейти на мастер должно быть не сложно.

Изменения в BC

  1. Переименование классов Memcached -> SocketMemcached
  2. Переписанный автолоадер. Изменения необходимые сделать под него:
  3. Если кто-то оборачивал class_exists, inteface_exists, trait_exists try/catch/ClassNotFoundException - теперь такой ошибки бросаться не будет.
  4. Если кто-то использовать Assert::classExists, то сейчас он бросает WrongArgumentException вместо ClassNotFoundException. Тут можно оставить что б бросался ClassNotFoundException. Не могу сказать как оно должно быть правильней.
  5. Заменить set_include_path конструкцию на AutoloaderPool::get('onPHP')->addPaths(array(..., ...)); либо на использование своего автолоадера.
  6. Диалекты перестают быть синглтонами и метод me бросает теперь ошибку(исключение ImaginaryDialect, используемый для тестов и получения хэша от select запроса). Все диалекты пораждаются из PgSQL, MySQL и другие классы через метод getDialect. Сделано это для того что бы при вызове функции эскейпинга диалект имел линк к базе, иначе эскейпинг мог проходить непредсказуемо.
  7. При миграции в коде нужно найти cтроки *Dialect::me( и заменить на код вида DBPool::getByDao(SomeMyClass::dao())->getDialect()
  8. PrimitiveHstore::exportValue возвращает ассоциативный массив, а не объект Hstore.
  9. Обновление CurlHttpClient.
  10. Теперь если используется метод POST, то get параметры из реквеста дописываются к url'у так же как и при методе get
  11. Теперь get и post параметры могут быть многомерными массивами, а не только двумерными. Для совместимости со старой версией конвертирования массива (добавлена временная константа ONPHP_CURL_CLIENT_OLD_TO_STRING по умолчанию установленная в false, но если true, то используется старое конвертирование)
  12. Реализована отправка файлов, в реквесте в массив files нужно помещать пути до файлов.
  13. Сохранение/обновление OnaToMany и ManyToMany сделано теперь через InnerTransaction. Со стороны ничего не должно измениться, но все таки если кто обратит на это внимание - будет хорошо.

Список новых фич

  1. Добавлен более статический вариант Enumeration - Enum. Для перехода на него нужно изменить в наследнике параметр protected $names = array(...); на $protected static $names = array(). API Класса тот же самый что и Enumeration + дополнен несколькими статическими методами, которых так не хватало. Требует php 5.3. Класс Enumeration никуда не пропал.
  2. Переименования в классах работающих с мемкешом. Решает проблему пересечения имен с php классом Memcached
  3. В DB добавлена работа с savepoint'ами.
  4. Добавлены классы InnerTransaction и InnerTransactionWrapper, для упрощения создания вложенных транзакций на savepoint'ах. Т.е. позволяет не задумываться - находимся ли мы в текущий момент внутри транзакции или нет.
  5. Переписано раскешивание, теперь оно работает через специальные классы Uncachers. Это позволило сделать корректным раскешивание внутри транзакции - оно происходит после "COMMIT;" в базе данных. Само же кэширование внутри транзакции использует теперь всегда RuntimeMemory, что может увеличить число запросов в базу, но позволяет не портить общий кэш незакомиченными данными.
  6. Улучшена логика сравнения старого и нового объектов в *DAO::merge() + сама логика сравнения вынесена большей частью в AbstractProtoClass и LightMetaProperty
  7. Полная поддержка типа данных баз timesamp with time zone в виде объектов TimestampTZ, PrimitiveTimestampTZ и прочих вспомогательных.
  8. PrimitiveHstore::exportValue возвращает ассоциативный массив, а не объект Hstore.
  9. Обновление CurlHttpClient.
  10. Теперь если используется метод POST, то get параметры из реквеста дописываются к url'у так же как и при методе get
  11. Теперь get и post параметры могут быть многомерными массивами, а не только двумерными. Для совместимости со старой версией конвертирования массива (добавлена временная константа ONPHP_CURL_CLIENT_OLD_TO_STRING по умолчанию установленная в false, но если true, то используется старое конвертирование)
  12. Реализована отправка файлов, в реквесте в массив files нужно помещать пути до файлов.
  13. В группе классов HttpUrl метод parse стал статическим, теперь более нужно писать HttpUrl::create()->parse($url), а достаточно HttpUrl::parse($url)
  14. Диалекты перестают быть синглтонами и метод me бросает теперь ошибку(исключение ImaginaryDialect, используемый для тестов). Все диалекты пораждаются из PgSQL, MySQL и другие классы через метод getDialect. Сделано это для того что бы при вызове функции эскейпинга диалект имел линк к базе, иначе эскейпинг мог проходить непредсказуемо.
  15. При миграции в коде нужно найти cтроки *Dialect::me( и заменить на код вида DBPool::getByDao(SomeMyClass::dao())->getDialect()
  16. Использование InnerTransaction внутри onPHP кода (CarefulDatabaseRunner и сохранение/обновления OneToMany и ManyToMany).
  17. Переписанный автолоадер. Изменения необходимые сделать под него:
  18. Если кто-то оборачивал class_exists, inteface_exists, trait_exists try/catch/ClassNotFoundException - теперь такой ошибки бросаться не будет.
  19. Если кто-то использовать Assert::classExists, то сейчас он бросает WrongArgumentException вместо ClassNotFoundException. Тут можно оставить что б бросался ClassNotFoundException. Не могу сказать как оно должно быть правильней.
  20. Заменить set_include_path конструкцию на AutoloaderPool::get('onPHP')->addPaths(array(..., ...)); либо на использование своего автолоадера.
Clone this wiki locally