-
epriestley authored
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
7f905706