Контент


[Ko3.3] Изменения в модуле Database

Доработок в этом модуле не слишком много, но я решил выделить их в отдельную статью. Все-таки это один из основных модулей Kohana.

Базовые изменения

  • Исправлено зацикливание с последующей ошибкой out of memory. Если в системе добавлен Database Config Reader, то он теперь не пытается считывать настройки подключения к БД (отсекается группа настроек ‘database‘). #4316
  • Для определения необходимости ведения статистических замеров (profiling) модуль теперь использует централизованную настройку Kohana::$profiling (устанавливается в Kohana::init()). В 3.2 модуль Database имел собственный параметр ‘profiling‘ в конфиге. #4203
  • В методах compile($db) семейства классов Database_Query параметр $db сделан опциональным. Кроме того, он может являться не объектом Database, а строкой (т.е. именем соответствующего профиля в конфиге). Такая логика уже присутствовала в методе execute($db). #3872

    Напомню, метод compile() преобразовывает условия запроса Query_Builder‘а в SQL-строку, но не выполняет запрос, а возвращает сгенерированный текст.

  • В Query_Builder появился еще один метод для работы с группами условий. В 3.2 имеются методы where_open(), and_where_open(), or_where_open() и where_close(). Они позволяют объединять условия в группы, например WHERE (`a` > 0 OR `b` < 0) AND `c` == 1. Иногда возникает потребность формировать такие группы условий динамически (например, обработка данных с формы поиска). И может возникнуть ситуация, когда группа создана (вызваны методы where_open() и where_close()), а внутри условий нет. Во избежание подобных ситуаций был добавлен метод where_close_empty(). Если внутри группы есть хоть одно условие, то он действует аналогично where_close(). #4052
  • Database-драйверы для Config и Session, а также модели (Model_Database) по умолчанию теперь используют профиль Database::$default. Ранее было жестко прописано значение 'default'. #4289
  • Повышено качество phpDoc-комментариев.

PDO

  • В драйвер PDO можно передать дополнительные параметры (см driver_options). Используйте ключ ['connection']['options']. #4372
  • Для PDO параметр 'charset' в конфиге неактулен. Устанавливайте его через DSN, либо в доп. параметрах (['connection']['options']['charset']). #4078

PS. Пока негусто. Если в последующих RC или в финальной версии будут еще изменения, они будут добавлены в данную статью.

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Опубликовано в Kohana3.

Теги: , , , .


Комментарии (12)

Будьте в курсе обсуждения, подпишитесь на RSS ленту комментариев к этой записи.

  1. zerkms пишет:

    Когда уже сделают поддержку PDO-драйвера в ОРМ?

  2. biakaveron пишет:

    А что именно они должны сделать? Насколько я знаю, нет универсального способа в PDO получить список полей таблицы. Есть два варианта — прописать вручную свойство $_table_columns (ключи — имена полей, значения могут быть любыми), либо сделать свой драйвер на основе PDO.

  3. zerkms пишет:

    Универсального способа нет, но список поддерживаемых субд известен и небольшой — почему бы сразу не добавить для каждой из? Без требования пользователям каждый раз делать одно и то же, что может быть единожды сделано в самом фреймворке?

  4. biakaveron пишет:

    В трекере я не нашел тикетов с данной проблемой. Почему бы не предложить pull request разработчикам? По собственным ощущениям, они задачи с уже предложенным вариантом решения обрабатывают намного быстрее, чем просто предложения/сообщения об ошибках.

  5. zerkms пишет:

    Все субд я не осилю, но решение с постгрей у меня есть. Раньше ещё были с ораклом и мускулем

    ps: про тикеты — не надо, кохановская дев-тим состоит из снобов чуть менее, чем полностью. Чтобы доказать, что оно того стоит — придётся потратить уйму сил.

  6. biakaveron пишет:

    Дык если не создать даже тикет, как можно требовать от разработчиков нужных изменений? Можно отправить pull request и начать обсуждение на оф. форуме. Найдутся желающие потратить «уйму сил» на допиливание и внедрение этой фичи. Тем более, что скоро 3.3, надо успеть ))

  7. zerkms пишет:

    Я уже как минимум один раз тикет создавал. Он был закрыт как wontfix

    Мол уважаемые разработчики — таскайте каждый свою реализацию из проекта в проект.

  8. zerkms пишет:

    Видишь ещё проблема в чём — ОРМ в принципе под сферической субд в вакууме работать не будет. К примеру count_all на нормальных субд зафейлится, потому что после добавления COUNT(*) он ещё и table_name.* дорисовывает.
    Потому, чтобы всё было честно, нужно ещё и орм переписать. Хотя в твиторе зомбор и писал, что текущий орм попахивает, но хз когда его хотя бы надумают переписать нормально, с тестами.

  9. biakaveron пишет:

    Ага, нашел этот тикет. Могу предложить разве что организовать Pull Request с уже готовыми драйверами для PDO. Например, у тебя уже есть Postgre, я для мускула быстро набросаю. На форуме вроде как есть SQLite-драйвер.

    А по поводу ORM — вопрос больной. Ведь по сути его особо не трогали в третьей ветке. Мало кому охота все там переделывать, насколько я понимаю.

  10. biakaveron пишет:

    К примеру count_all на нормальных субд зафейлится, потому что после добавления COUNT(*) он ещё и table_name.* дорисовывает.

    Хм. Проверил в 3.3 — нет такого. Генерируется SELECT COUNT(*) AS records_found FROM ...

  11. zerkms пишет:

    Вот кстати ещё один пример раздолбайского отношения к DB & ORM в дев-тиме: http://dev.kohanaframework.org/issues/4445

    tl;dr: with() ломает запрос, фикс тривиальный показал. Они упёрлись, из принципа (разумных причин не фиксить не было и нет)

  12. biakaveron пишет:

    Вообще, очень много зависших тикетов, которые были один раз просмотрены, и потом их просто не замечают. Вчера решил пересмотреть свои старые тикеты, и запулил Pull Request для одного из них (для Userguide). В итоге, ночью Вуди его вмержил в 3.2 и 3.3.

    Получается, надо пинать постоянно разработчиков. Один отказался, другой примет.



Можно включить подсветку кода: <code><pre lang="">...</pre></code>
Разрешены некоторые HTML теги

или используйте trackback.