Uploaded image for project: 'Jackrabbit Oak'
  1. Jackrabbit Oak
  2. OAK-4934

Query shapes for JCR Query



    • Type: Wish
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: query
    • Labels:


      For certain requirements it would be good to have a notion/support to deduce query shape [1]

      A combination of query predicate, sort, and projection specifications.

      For the query predicate, only the structure of the predicate, including the field names, are significant; the values in the query predicate are insignificant. As such, a query predicate { type: 'food' } is equivalent to the query predicate { type: 'utensil' } for a query shape.

      So transforming that to Oak the shape should represent a JCR-SQL2 query string (xpath query gets transformed to SQL2) which is a canonical representation of actual query ignoring the property restriction values.

      Example we have 2 queries

      • SELECT * FROM [app:Asset] AS a WHERE a.[jcr:content/metadata/status] = 'published'
      • SELECT * FROM [app:Asset] AS a WHERE a.[jcr:content/metadata/status] = 'disabled'

      The query shape would be

      SELECT * FROM [app:Asset] AS a WHERE a.[jcr:content/metadata/status] = 'A'. The plan for query having given shape would remain same irrespective of value of property restrictions. Path restriction can cause some difference though

      The shape can then be used for

      • Stats Collection - Currently stats collection gets overflown if same query with different value gets invoked
      • Allow configuring hints - See support in Mongo [2] for an example. One specify via config that for a query of such and such shape this index should be used
      • Less noisy diagnostics - If a query gets invoked with bad plan the QE can log the warning once instead of logging it for each query invocation involving different values.

      [1] https://docs.mongodb.com/manual/reference/glossary/#term-query-shape
      [2] https://docs.mongodb.com/manual/reference/command/planCacheSetFilter/


          Issue Links



              • Assignee:
                chetanm Chetan Mehrotra
              • Votes:
                0 Vote for this issue
                2 Start watching this issue


                • Created: