Homestyx hydra
Diffusion hydra 7f90570636af

When paging by Ferret "rank", page using "HAVING rank > ...", not "WHERE rank >…

Description

When paging by Ferret "rank", page using "HAVING rank > ...", not "WHERE rank > ..."

Summary:
Ref T13091. The Ferret "rank" column is a function of the query text and looks something like SELECT ..., 2 + 2 AS rank, ....

You can't apply conditions to this kind of dynamic column with a WHERE clause: you get a slightly unhelpful error like "column rank unknown in where clause". You must use HAVING:

mysql> SELECT 2 + 2 AS x WHERE x = 4;
ERROR 1054 (42S22): Unknown column 'x' in 'where clause'
mysql> SELECT 2 + 2 AS x HAVING x = 4;
+---+
| x |
+---+
| 4 |
+---+
1 row in set (0.00 sec)

Add a flag to paging column definitions to let them specify that they must be applied with HAVING, then apply the whole paging clause with HAVING if any column requires HAVING.

Test Plan:

  • In Maniphest, ran a fulltext search matching more than 100 results, ordered by "Relevance", then clicked "Next Page".
  • Before patch: query with ... WHERE rank > 123 OR ... caused MySQL error because rank is not a WHERE-able column.
  • After patch: query builds as ... HAVING rank > 123 OR ..., pages properly, no MySQL error.

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T13091

Differential Revision: https://secure.phabricator.com/D20298

Details

Provenance
epriestleyAuthored on Mar 19 2019, 1:34 PM
sirocylPushed on Oct 16 2024, 5:49 AM
Parents
R1:f047b90d9383: Don't draw the task graph line image on devices by default
Branches
Unknown
Tags
Unknown

Event Timeline