Uploaded image for project: 'Blazegraph (by SYSTAP)'
  1. Blazegraph (by SYSTAP)
  2. BLZG-397

BackchainAccessPath is not integrated into the new QueryEngine.


    • Type: Bug
    • Status: Open
    • Resolution: Unresolved
    • Affects Version/s: QUADS_QUERY_BRANCH
    • Fix Version/s: None
    • Component/s: Bigdata RDF Database
    • Labels:


      The BackchainAccessPath provides an expander mechanism which can be used for some limited kinds of query time inference against the standalone database.

      The integration point for this historically was: RDFJoinNexus#getTailAccessPath(IRelation r,IPredicate p). The glue code follows:

              if(backchain && relation instanceof SPORelation) {
                  if (expander == null || expander.backchain()) {
                      final SPORelation spoRelation = (SPORelation)relation;
                      accessPath = new BackchainAccessPath(
                              spoRelation.getContainer(), accessPath,
                              joinNexusFactory.isOwlSameAsUsed ? Boolean.TRUE
                                      : Boolean.FALSE);

      The corresponding logic is now found in:

      AbstractRelation#getAccessPath(IIndexManager localIndexManager, IKeyOrder<E> keyOrder, IPredicate<E> predicate)

      but the glue logic is not present in that method.

      Conceptually, the BackchainAccessPath is itself just an expander and could be written into a query using the IAccessPathExpander interface, in which case it would be up to the query generator to get this right. If this approach is taken, then the backchain() method on IAccessPathExpander should be removed.

      It is also worth noting that the BackchainAccessPath was only being run against predicates which did not specify their own expanders, that is, we never actually wrapped an expander inside of the backchain logic.

      Finally, since the backchainer is enabled as a SAIL property, unit tests for the expander behavior need to be written at the SAIL level. The backchainer is actually leveraged in two places -- simple statement visitation patterns and high level query. Unit tests will have to provide coverage for both use cases.


        There are no comments yet on this issue.


          • Assignee:
            mikepersonick mikepersonick
            bryanthompson bryanthompson
          • Votes:
            0 Vote for this issue
            2 Start watching this issue


            • Created: