Module DenseRank
Provides the denseRank
predicate for computing dense rank
s. 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.DenseRank
Predicates
denseRank | Gets the |
Parameters
Input | DenseRankInputSig |