Патч для кэширования пустых результатов запросов в Kohana

Простое исправление досадного недоразумения

Проблема: (3.0.7, возможно, ранние версии) не может брать результаты запросов из кэша, если запрос вернул пустой результат.

Решение проблемы.

Разгадка кроется в файле modules/database/classes//database/query.php. Дело в том, что в PHP проверки вида if ($condition) возвращают false, если вычисленное значение $condition — 0, null, false, "", array(), ….

Поэтому в такой проверке:

[-]
View Code PHP
if ($result = Kohana::cache($cache_key, NULL, $this->_lifetime))
{
    // Return a cached result
    return new Database_Result_Cached($result, $sql, $this->_as_object);
}

условие всегда будет ложно для пустых результатов.

Исправляется просто: из исходного кода Kohana::cache() видно, что Kohana::cache() возвращает null, если объект в кэше не найден либо произошла ошибка. Следовательно,

[-]
View Code PHP
if (($result = Kohana::cache($cache_key, NULL, $this->_lifetime)) !== null)
{
    // Return a cached result
    return new Database_Result_Cached($result, $sql, $this->_as_object);
}

даст корректный результат.

Автор: ; опубликовано в: Kohana; метки: Kohana, Kohana 3, база данных, кэш
11
Авг
2010

RSS Комментарии к статье «Патч для кэширования пустых результатов запросов в Kohana» (1)  »

  1. Спасибо, как раз искал.

Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.

Оставить комментарий к записи «Патч для кэширования пустых результатов запросов в Kohana»

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя

गते गते पारगते पारसंगते बोधि स्वाहा