Class QueryHash

java.lang.Object
org.aksw.jenax.arq.util.syntax.QueryHash

public class QueryHash extends Object
A hasher for SPARQL queries that keeps track of separate hash codes for the body, the subset of the projection (w.r.t. visible variables), the permutation of the projection and The hash for
 SELECT COUNT(?p) { ?s ?p ?o } GROUP BY STR(?o) LIMIT 10 OFFSET 2
 
is
 ftiGBh8SJSZ89mbO9FOsCtHSSD1t3nqqTox3JNisfvI/MD9wyw/1/2+10
 
Author:
raven
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected LehmerHash
     
    protected com.google.common.hash.HashCode
     
    protected LehmerHash
     
    protected LehmerHash
     
    protected org.apache.jena.query.Query
     
    protected LehmerHash
     
    protected LehmerHash
     
    protected LehmerHash
     
    protected org.apache.jena.query.Query
    The body query is essentially a version of the query with an altered projection: For non-group-by queries: The projection gets replaced with SELECT * For group-by-queries:
    protected LehmerHash
     
    protected com.google.common.hash.HashCode
     
    protected com.google.common.hash.HashCode
     
  • Constructor Summary

    Constructors
    Constructor
    Description
    QueryHash(org.apache.jena.query.Query originalQuery, org.apache.jena.query.Query harmonizedQuery, com.google.common.hash.HashCode bodyHashCode, LehmerHash aggHash, LehmerHash groupByHash, LehmerHash havingHash, LehmerHash orderByHash, LehmerHash projecHash, com.google.common.hash.HashCode relabelHash, LehmerHash defaultGraphHash, LehmerHash namedGraphHash, com.google.common.hash.HashCode prologueHash)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static QueryHash
    createHash(org.apache.jena.query.Query query)
     
    static String
    fmt(org.apache.jena.query.SortCondition sc)
    Format a sort condition
     
    com.google.common.hash.HashCode
     
     
     
    org.apache.jena.query.Query
     
     
     
    static Set<org.apache.jena.sparql.core.Var>
    getNonAggregateVars(org.apache.jena.query.Query query)
    Return the set of result variables that DO NOT map to an expression making use of an aggregator
     
    org.apache.jena.query.Query
     
    static org.apache.jena.sparql.core.Var
    getOrNext(Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.apache.jena.sparql.core.Var v, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen)
     
     
    com.google.common.hash.HashCode
     
    protected String
    getQueryTypePrefix(org.apache.jena.query.QueryType queryType)
     
    com.google.common.hash.HashCode
     
    static String
    getSpecialPrefix(org.apache.jena.sparql.core.Var var)
     
    static <T> LehmerHash
    hash(com.google.common.hash.HashFunction hashFn, Collection<T> elements, Function<T,String> toString)
     
    static void
    main(String[] args)
     
    static org.apache.jena.sparql.core.Var
    nextVar(org.apache.jena.sparql.core.Var baseVar, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen)
     
    static org.apache.jena.sparql.graph.NodeTransform
    nodeTransform(Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen)
     
    static void
    relabelVariables(org.apache.jena.query.Query query)
     
    static String
    str(byte[] rawBytes)
    Create a base64url encoded string from the trimmed byte array.
    static String
    str(com.google.common.hash.HashCode hashCode)
     
    str(BigInteger value)
     
    static LehmerHash
    toHashCode(org.apache.jena.sparql.core.VarExprList vel)
     
     
    static List<org.apache.jena.sparql.expr.Expr>
    transform(List<org.apache.jena.sparql.expr.Expr> es, Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen)
     
    static List<org.apache.jena.sparql.expr.ExprAggregator>
    transform(List<org.apache.jena.sparql.expr.ExprAggregator> eas, Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen, com.google.common.hash.HashFunction hashFn)
     
    static org.apache.jena.graph.Node
    transform(org.apache.jena.graph.Node node, Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen)
     
    static org.apache.jena.sparql.core.VarExprList
    transform(org.apache.jena.sparql.core.VarExprList vel, Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen, com.google.common.hash.HashFunction hashFn)
     
    static Map.Entry<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.expr.Expr>
    transform(org.apache.jena.sparql.core.Var v, org.apache.jena.sparql.expr.Expr e, Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen, com.google.common.hash.HashFunction hashFn)
    If there is an expression and the variable is not yet relabeled, then the given variable is remapped to a hash of that expression.
    static org.apache.jena.sparql.expr.ExprAggregator
    transform(org.apache.jena.sparql.expr.ExprAggregator ea, Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen, com.google.common.hash.HashFunction hashFn)
     
    static org.apache.jena.sparql.expr.Expr
    transform(org.apache.jena.sparql.expr.Expr e, Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen)
     
    static org.apache.jena.sparql.syntax.Template
    transform(org.apache.jena.sparql.syntax.Template template, Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen)
     
    static byte[]
    trim(byte[] rawBytes)
    Return a copy of the byte array with any leading 0s removed

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • originalQuery

      protected org.apache.jena.query.Query originalQuery
      The body query is essentially a version of the query with an altered projection: For non-group-by queries: The projection gets replaced with SELECT * For group-by-queries:
    • harmonizedQuery

      protected org.apache.jena.query.Query harmonizedQuery
    • bodyHashCode

      protected com.google.common.hash.HashCode bodyHashCode
    • aggHash

      protected LehmerHash aggHash
    • groupByHash

      protected LehmerHash groupByHash
    • havingHash

      protected LehmerHash havingHash
    • orderByHash

      protected LehmerHash orderByHash
    • projecHash

      protected LehmerHash projecHash
    • defaultGraphHash

      protected LehmerHash defaultGraphHash
    • namedGraphHash

      protected LehmerHash namedGraphHash
    • relabelHash

      protected com.google.common.hash.HashCode relabelHash
    • prologueHash

      protected com.google.common.hash.HashCode prologueHash
  • Constructor Details

    • QueryHash

      public QueryHash(org.apache.jena.query.Query originalQuery, org.apache.jena.query.Query harmonizedQuery, com.google.common.hash.HashCode bodyHashCode, LehmerHash aggHash, LehmerHash groupByHash, LehmerHash havingHash, LehmerHash orderByHash, LehmerHash projecHash, com.google.common.hash.HashCode relabelHash, LehmerHash defaultGraphHash, LehmerHash namedGraphHash, com.google.common.hash.HashCode prologueHash)
  • Method Details

    • getOriginalQuery

      public org.apache.jena.query.Query getOriginalQuery()
    • getHarmonizedQuery

      public org.apache.jena.query.Query getHarmonizedQuery()
    • getBodyHashCode

      public com.google.common.hash.HashCode getBodyHashCode()
    • getAggHash

      public LehmerHash getAggHash()
    • getGroupByHash

      public LehmerHash getGroupByHash()
    • getHavingHash

      public LehmerHash getHavingHash()
    • getOrderByHash

      public LehmerHash getOrderByHash()
    • getProjecHash

      public LehmerHash getProjecHash()
    • getRelabelHash

      public com.google.common.hash.HashCode getRelabelHash()
    • getDefaultGraphHash

      public LehmerHash getDefaultGraphHash()
    • getNamedGraphHash

      public LehmerHash getNamedGraphHash()
    • getPrologueHash

      public com.google.common.hash.HashCode getPrologueHash()
    • getNonAggregateVars

      public static Set<org.apache.jena.sparql.core.Var> getNonAggregateVars(org.apache.jena.query.Query query)
      Return the set of result variables that DO NOT map to an expression making use of an aggregator
    • relabelVariables

      public static void relabelVariables(org.apache.jena.query.Query query)
    • createHash

      public static QueryHash createHash(org.apache.jena.query.Query query)
    • fmt

      public static String fmt(org.apache.jena.query.SortCondition sc)
      Format a sort condition
    • transform

      public static List<org.apache.jena.sparql.expr.ExprAggregator> transform(List<org.apache.jena.sparql.expr.ExprAggregator> eas, Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen, com.google.common.hash.HashFunction hashFn)
    • transform

      public static org.apache.jena.sparql.core.VarExprList transform(org.apache.jena.sparql.core.VarExprList vel, Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen, com.google.common.hash.HashFunction hashFn)
    • transform

      public static List<org.apache.jena.sparql.expr.Expr> transform(List<org.apache.jena.sparql.expr.Expr> es, Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen)
    • transform

      public static org.apache.jena.sparql.expr.Expr transform(org.apache.jena.sparql.expr.Expr e, Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen)
    • transform

      public static Map.Entry<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.expr.Expr> transform(org.apache.jena.sparql.core.Var v, org.apache.jena.sparql.expr.Expr e, Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen, com.google.common.hash.HashFunction hashFn)
      If there is an expression and the variable is not yet relabeled, then the given variable is remapped to a hash of that expression.
    • getOrNext

      public static org.apache.jena.sparql.core.Var getOrNext(Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.apache.jena.sparql.core.Var v, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen)
    • nextVar

      public static org.apache.jena.sparql.core.Var nextVar(org.apache.jena.sparql.core.Var baseVar, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen)
    • getSpecialPrefix

      public static String getSpecialPrefix(org.apache.jena.sparql.core.Var var)
    • nodeTransform

      public static org.apache.jena.sparql.graph.NodeTransform nodeTransform(Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen)
    • transform

      public static org.apache.jena.graph.Node transform(org.apache.jena.graph.Node node, Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen)
    • transform

      public static org.apache.jena.sparql.syntax.Template transform(org.apache.jena.sparql.syntax.Template template, Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen)
    • transform

      public static org.apache.jena.sparql.expr.ExprAggregator transform(org.apache.jena.sparql.expr.ExprAggregator ea, Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> relabel, org.aksw.commons.collections.generator.Generator<org.apache.jena.sparql.core.Var> varGen, com.google.common.hash.HashFunction hashFn)
    • toHashCode

      public static LehmerHash toHashCode(org.apache.jena.sparql.core.VarExprList vel)
    • hash

      public static <T> LehmerHash hash(com.google.common.hash.HashFunction hashFn, Collection<T> elements, Function<T,String> toString)
    • str

      public static String str(com.google.common.hash.HashCode hashCode)
    • trim

      public static byte[] trim(byte[] rawBytes)
      Return a copy of the byte array with any leading 0s removed
    • str

      public static String str(byte[] rawBytes)
      Create a base64url encoded string from the trimmed byte array. If the trimmed byte array is empty, then a single 0 byte is used instead.
    • str

      public String str(BigInteger value)
    • getQueryTypePrefix

      protected String getQueryTypePrefix(org.apache.jena.query.QueryType queryType)
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • main

      public static void main(String[] args)