diff --git a/.changeset/happy-ads-nail.md b/.changeset/happy-ads-nail.md new file mode 100644 index 000000000..6d54755bb --- /dev/null +++ b/.changeset/happy-ads-nail.md @@ -0,0 +1,5 @@ +--- +"@cube-creator/shared-dimensions-api": patch +--- + +Shared dimension terms could not be found if they contained an apostrophe (fixes #1435) diff --git a/apis/shared-dimensions/lib/query.ts b/apis/shared-dimensions/lib/query.ts index b5e0aa32b..ef5651a6d 100644 --- a/apis/shared-dimensions/lib/query.ts +++ b/apis/shared-dimensions/lib/query.ts @@ -11,7 +11,7 @@ export function textSearch(subject: Term, predicate: Term, textQuery: string) { const variable = $rdf.variable('_s') return sparql` service ${fts.textMatch} { - [] ${fts.query} '${textQuery + '*'}'; + [] ${fts.query} """${textQuery + '*'}"""; ${fts.result} ${variable} ; } ${subject} ${predicate} ${variable} . @@ -20,7 +20,7 @@ export function textSearch(subject: Term, predicate: Term, textQuery: string) { case 'fuseki': { const variable = $rdf.variable('_s') return sparql` - ${subject} (${predicate} '${textQuery + '*'}') . + ${subject} (${predicate} """${textQuery + '*'}""") . # Second filtering to make sure the word starts with the given query ${subject} ${predicate} ${variable} . diff --git a/apis/shared-dimensions/lib/shapeToQuery.ts b/apis/shared-dimensions/lib/shapeToQuery.ts index cad723f01..bf777c003 100644 --- a/apis/shared-dimensions/lib/shapeToQuery.ts +++ b/apis/shared-dimensions/lib/shapeToQuery.ts @@ -70,7 +70,7 @@ async function defineConstraintComponents() { const fts = namespace('tag:stardog:api:search:') return sparql` service ${fts.textMatch} { - [] ${fts.query} '${this.pattern + '*'}'; + [] ${fts.query} """${this.pattern + '*'}"""; ${fts.result} ${valueNode} ; } ${focusNode} ${propertyPath} ${valueNode} . @@ -79,7 +79,7 @@ async function defineConstraintComponents() { if (this.vendor === 'fuseki') { return sparql` - ${focusNode} (${propertyPath} '${this.pattern + '*'}') . + ${focusNode} (${propertyPath} """${this.pattern + '*'}""") . # Second filtering to make sure the word starts with the given query ${focusNode} ${propertyPath} ${valueNode} . diff --git a/e2e-tests/shared-dimensions/terms-apostrophe-filter.hydra b/e2e-tests/shared-dimensions/terms-apostrophe-filter.hydra new file mode 100644 index 000000000..5878779a4 --- /dev/null +++ b/e2e-tests/shared-dimensions/terms-apostrophe-filter.hydra @@ -0,0 +1,17 @@ +PREFIX md: +PREFIX hydra: +PREFIX schema: +PREFIX qudt: +PREFIX meta: +PREFIX sh: + +ENTRYPOINT "dimension/_terms?dimension=http%3A%2F%2Fexample.com%2Fdimension%2Fcolors&q=%22L%27Abb%22" + +HEADERS { + x-user "john-doe" + x-permission "pipelines:write" +} + +With Class md:SharedDimensionTerms { + Expect Property hydra:totalItems 0 +}