Module DenseRank
Provides the denseRank predicate for computing dense ranks. For example,
if we have
query predicate names(string name) {
name = ["Alice", "Bob", "Charles", "Charlie", "David"]
}
int rankByFirstLetter(string name) {
name = rank[result](string n | names(n) | n order by n.charAt(0))
}
then rankByFirstLetter computes the following relation
Alice 1
Bob 2
Charles 3
Charlie 3
David 5
Note that "David" has rank 5 instead of 4. If we want a dense ranking instead,
we can do
module M implements DenseRankInputSig {
class Ranked = string;
predicate getRank = rankByFirstLetter/1;
}
predicate denseRank = DenseRank<M>::denseRank/1;
Import path
import codeql.util.DenseRankPredicates
| denseRank | Gets the |
Parameters
| Input | DenseRankInputSig |