CodeQL library for Rust
codeql/rust-all 0.1.11 (changelog, source)
Search

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.DenseRank

Predicates

denseRank

Gets the Ranked value for which the dense rank is rnk.

Parameters