Skip to content

Commit

Permalink
fix: UNION performance
Browse files Browse the repository at this point in the history
  • Loading branch information
tpluscode committed Nov 1, 2022
1 parent 362807d commit 6b3fb65
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 16 deletions.
5 changes: 5 additions & 0 deletions .changeset/few-carrots-explain.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"rdf-web-access-control": minor
---

Inline the `VALUES` clauses inside every `UNION` to improve performance when store does "bottom-up" query evaluation
25 changes: 15 additions & 10 deletions packages/rdf-web-access-control/lib/instanceAuthorization.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,19 @@ export function instanceAuthorization(
const check = { authorization, agent: variable('agent'), agentClass: variable('agentClass') }
const term = variable('term')

const patternUnion = authorizationChecks.reduce((previous, buildPatterns) => {
const values = sparql`
VALUES ?mode { ${acl.Control} ${accessMode} }
VALUES ?agent { ${agentTerm || '<>'} }
VALUES ?agentClass { ${foaf.Agent} ${agentClasses(agent).filter(onlyNamedNodes)} }
VALUES ?term { ${terms} }
`

return ASK`${(authorizationChecks.reduce((previous, buildPatterns) => {
return sparql`${previous}
UNION
{
${values}
${authorization} a ${acl.Authorization} ;
${acl.mode} ?mode ;
${acl.accessTo} ${term} .
Expand All @@ -26,6 +35,8 @@ export function instanceAuthorization(
}
UNION
{
${values}
${term} a ?type .
${authorization} a ${acl.Authorization} ;
${acl.mode} ?mode ;
Expand All @@ -34,14 +45,8 @@ export function instanceAuthorization(
${combinePatterns(additionalPatterns, authorization)}
}`
}, sparql`{
${term} ${acl.owner} ?agent .
}`)
${values}
return ASK`
VALUES ?mode { ${acl.Control} ${accessMode} }
VALUES ?agent { ${agentTerm || '<>'} }
VALUES ?agentClass { ${foaf.Agent} ${agentClasses(agent).filter(onlyNamedNodes)} }
VALUES ?term { ${terms} }
${patternUnion}`
${term} ${acl.owner} ?agent .
}`))}`
}
14 changes: 9 additions & 5 deletions packages/rdf-web-access-control/lib/typeAuthorization.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,17 @@ export function typeAuthorization(
const authorization = variable('authorization')
const check = { authorization, agent: variable('agent'), agentClass: variable('agentClass') }

const values = sparql`
VALUES ?mode { ${acl.Control} ${accessMode} }
VALUES ?type { ${rdfs.Resource} ${types.filter(onlyNamedNodes)} }
VALUES ?agent { ${agentTerm || '<>'} }
VALUES ?agentClass { ${foaf.Agent} ${agentClasses(agent).filter(onlyNamedNodes)} }
`

const patternUnion = authorizationChecks.reduce((previous: SparqlTemplateResult | string, buildPatterns) => {
const next = sparql`{
${values}
${authorization} a ${acl.Authorization} ;
${acl.mode} ?mode ;
${acl.accessToClass} ?type .
Expand All @@ -29,11 +38,6 @@ export function typeAuthorization(
}, '')

return ASK`
VALUES ?mode { ${acl.Control} ${accessMode} }
VALUES ?type { ${rdfs.Resource} ${types.filter(onlyNamedNodes)} }
VALUES ?agent { ${agentTerm || '<>'} }
VALUES ?agentClass { ${foaf.Agent} ${agentClasses(agent).filter(onlyNamedNodes)} }
${combinePatterns(additionalPatterns, authorization)}
${patternUnion}`
Expand Down
2 changes: 1 addition & 1 deletion yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1772,7 +1772,7 @@ ansi-regex@^4.1.0:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed"
integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==

ansi-regex@^5.0.0, ansi-regex@^5.0.1:
ansi-regex@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
Expand Down

0 comments on commit 6b3fb65

Please sign in to comment.