Идеи пользователя 80243

Рейтинг: 1.0978  
Внедрено
Предложил Пользователь 80243 16.09.2014 19:15:21

Подсчет строк в D7

/bitrix\modules\main\lib\entity\query.php:1342

/*
Vadim: this is for paging but currently is not used
      if ($this->count_total || !is_null($this->offset))
      {
         $cnt_body_elements = $build_parts;

         // remove order
         unset($cnt_body_elements['ORDER BY']);

         $cnt_query = join("\n", $cnt_body_elements);

         // remove long aliases
         list($cnt_query, ) = $this->replaceSelectAliases($cnt_query);

         // sel ect count
         $cnt_query = 'SELECT COUNT(1) AS TMP_ROWS_CNT FR OM ('.$cnt_query.') xxx';
         $cnt = $connection->queryScalar($cnt_query);
      }
*/ 
Уважаемый Вадим!!
К сожалению, это не используется только потому это не сделано. У нас большой проект на орме уже работает, вышло пару десятков обновлений, но до сих пор вы почему то считаете, что это ни кому ни нужно.
Подпираем костылями как можем, но очень вас просим включить функционал подсчета строк как можно быстрее. Или укажите когда примерно стоит ожидать.
Рейтинг: 0.219  
Ответил 19.09.2014 15:33:53
Спасибо вам за идею. Мы берем ее в работу.

Будем рады за любые идеи по развитию нового ядра.
Рейтинг: 2.4162  
Новая
Предложил Пользователь 80243 18.06.2014 15:39:03

некорректный DateTime при 0000-00-00 00:00:00

Имеем:
поле в базе типа TIMESTAMP
мапинг этого поля с типом datetime

Если поле имеет значение NULL, то всё ок.
НО если поле имеет значение 0000-00-00 00:00:00, \Bitrix\Main\DB\Result::fetch() проводит пост обработку методом \Bitrix\Main\DB\MysqliResult::convertDataFromDb()

protected function convertDataFromDb($value, $fieldType)
    {
        switch ($fieldType)
        {
            case 'timestamp':
            case 'datetime':
                return $value === null ? null : new \Bitrix\Main\Type\DateTime($value, "Y-m-d H:i:s");
                break;
            case 'date':
                return $value === null ? null : new \Bitrix\Main\Type\DateTime($value, "Y-m-d");
                break;
            default:
                break;
        }

        return $value;
    } 


и врезультате \Bitrix\Main\Type\DateTime::getValue()->toString() возращает
-0001-11-30 00:00:00
Что является некорректным.
Предлагаю внести дополнительную проверку на основе \Bitrix\Main\Type\DateTime::getTimestamp()
при таком значении вернёт false