New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Skip Paginator LIMIT subquery and WHERE IN if query do not have LIMIT #7829
Comments
@Seb33300 I'd say that handle this case isn't an ORM's responsibility. The paginator component is quite generic and having a flag to enable its pagination behaviour or not smells like a bad design for the library. I'd suggest you to encapsulate this in your application (perhaps decorating the paginator?). |
It sounds to me like you already know if you don't need a limit clause. So, if you're not using a limit don't use a Paginator. |
I know this is useless to use the Btw even if we do not use it to paginate results, it could also be used to count distinct entries. @lcobucci not sure what you mean by a flag, but it just require to check if a limit has been added to the query. No extra parameter or something else required. |
Basically you want to say that if the I think that may be an acceptable feature, if it doesn't raise complexity too much. Could you hack up an example, just to post it for the purposes of discussion? |
Yes, this is exactly what I mean. Not sure about the example you want. An example of use case or a pull request to implement it? |
@Seb33300 setting
A PR with (at least) a functional test showing what you expect from the library. You can use this test as example: |
Please send it to v2.7, btw 👍 |
…gin-master v2.7.0 [![Build Status](https://travis-ci.org/doctrine/orm.svg?branch=v2.7.0)](https://travis-ci.org/doctrine/orm) This release solves Symfony 5.0 compatibility issues, some small improvements, and adds various deprecation notices. Please read carefully the [upgrade to 2.7 notes](https://github.com/doctrine/orm/blob/2.7/UPGRADE.md#upgrade-to-27) to know more about the reasons and how to fix the deprecation messages. --- - Total issues resolved: **1** - Total pull requests resolved: **15** - Total contributors: **10** Deprecation ----------- - [7911: Be explicit about which Doctrine package in message](doctrine#7911) thanks to @lcobucci - [7909: Add deprecation messages](doctrine#7909) thanks to @lcobucci - [7901: Add deprecation warnings for 2.7.x](doctrine#7901) thanks to @lcobucci - [7701: Split and deprecate AbstractQuery#useResultCache()](doctrine#7701) thanks to @someniatko CI -- - [7904: Make sure composer files are valid](doctrine#7904) thanks to @greg0ire - [7600: &doctrine#91;2.7&doctrine#93; CI: Test against PHP 7.4snapshot instead of nightly (8.0)](doctrine#7600) thanks to @Majkl578 Improvement ----------- - [7876: Fix compat of commands with Symfony 5](doctrine#7876) thanks to @nicolas-grekas - [7829: Skip Paginator LIMIT subquery and WHERE IN if query do not have LIMIT](doctrine#7829) thanks to @Seb33300 - [7723: Allow Symfony 5.0](doctrine#7723) thanks to @nicolas-grekas - [7710: Prettified arrays in tool command orm:mapping:describe](doctrine#7710) thanks to @rtek - [7340: Fix config template for PHPUnit >= 7.2](doctrine#7340) thanks to @guilliamxavier BC Break,Improvement -------------------- - [7863: Paginator: Skip limit subquery if not required](doctrine#7863) thanks to @Seb33300 Documentation ------------- - [7382: Update homepage](doctrine#7382) thanks to @Majkl578 Bug --- - [7326: Cherry-pick doctrine#7307 to fix remaining usages of deprecated ClassLoader and Inflector from doctrine/common](doctrine#7326) thanks to @nicolas-grekas - [7079: Fix getJoinTableName for sqlite with schema attribute](doctrine#7079) thanks to @mairo744 BC Break,Deprecation,Improvement -------------------------------- - [6803: Deprecation of EntityManager copy method](doctrine#6803) thanks to @SenseException
Since v2.7.0 the ORM avoids using extra queries via the paginator component when maximum results isn't set on the original query. With that change, this test was not executing the code path that it was expected to run. This makes sure we trigger the forcing of custom DBAL types when hydrating the identifiers, making sure we don't introduce bugs. More info: - Forcing DBAL type conversion: doctrine#7905 - Issue on optimisation: doctrine#7829 - PR on optimisation: doctrine#7863 - Minor BC-break docs: https://github.com/doctrine/orm/blob/2.11.x/UPGRADE.md#minor-bc-break-paginator-output-walkers-arent-be-called-anymore-on-sub-queries-for-queries-without-max-results
Since v2.7.0 the ORM avoids using extra queries via the paginator component when maximum results isn't set on the original query. With that change, this test was not executing the code path that it was expected to run. This makes sure we trigger the forcing of custom DBAL types when hydrating the identifiers, making sure we don't introduce bugs. More info: - Forcing DBAL type conversion: doctrine#7905 - Issue on optimisation: doctrine#7829 - PR on optimisation: doctrine#7863 - Minor BC-break docs: https://github.com/doctrine/orm/blob/2.11.x/UPGRADE.md#minor-bc-break-paginator-output-walkers-arent-be-called-anymore-on-sub-queries-for-queries-without-max-results
I ran into an issue with the
Paginator
which I think could be handled to prevent it.I am using the
Paginator
to paginate a table.The user can choose the number of items by page (10 ,20, ... but also All items).
In the case the user choose to display
All items
, theLIMIT
clause will NOT be added to the query.Even if the
Paginator
is not required in this scenario, the same part of code handle this case so we also give the query to thePaginator
.This is working property unless the query return too many results.
Because the
Paginator
will use aWHERE IN
query and it could reach the limit of allowed number of parameters by the database engine.See: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/tutorials/pagination.html
This is what we are encountering on tables with thousands of items on SQL Server.
The text was updated successfully, but these errors were encountered: