SqlDataProvider и yii\db\oci\QueryBuilder

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
gmiramir
Сообщения: 1
Зарегистрирован: 2014.07.10, 19:32

SqlDataProvider и yii\db\oci\QueryBuilder

Сообщение gmiramir »

В данный момент данная связка не будет работать если задать пагинацию. Дело тут в особенностях реализации пагинации для Oracle, в нём для работы пагинации нужно оборачивать исходный запрос в специальную конструкцию

Код: Выделить всё

WITH USER_SQL AS ({Исходный sql}),
    PAGINATION AS (SELECT USER_SQL.*, rownum as rowNumId FROM USER_SQL)
SELECT *
FROM PAGINATION
WHERE rowNumId > :offset and rownum <= :limit
Из-за этого и определения \yii\db\QueryBuilder::buildLimit() невозможно сделать оракловый QueryBuilder не сохраняющим состояние, а это предполагается в \yii\db\Schema и используется в SqlDataProvider.

На мой взгляд лучшим решением было бы изменить семантику вызова QueryBuilder::buildLimit() с

Код: Выделить всё

QueryBuilder::buildLimit($limit, $offset)
на

Код: Выделить всё

QueryBuilder::buildLimit($sql, $limit, $offset)
.
Может есть какое-то другое решение?
miramir
Сообщения: 33
Зарегистрирован: 2009.08.03, 05:25
Откуда: Челябинск

Re: SqlDataProvider и yii\db\oci\QueryBuilder

Сообщение miramir »

Я сделал pull request чтоб пофиксить эту багу.
miramir
Сообщения: 33
Зарегистрирован: 2009.08.03, 05:25
Откуда: Челябинск

Re: SqlDataProvider и yii\db\oci\QueryBuilder

Сообщение miramir »

Судя по ответу qiangxue подобная проблема есть и в старых (< 2011) версиях MsSql, к сожалению данный реквест не решит данной проблемы. К сожалению у меня нет возможности исправить данную проблему для mssql, может кто-то возьмётся за её исправление?
Ответить