From b141256111dc9ede54891cab972f19f256e5b466 Mon Sep 17 00:00:00 2001
From: esikkala <esko.ikkala@aalto.fi>
Date: Fri, 23 Apr 2021 10:00:20 +0300
Subject: [PATCH] Add optional typecasting config for integer facets

---
 src/server/sparql/Filters.js                           | 10 +++++++---
 .../sampo/perspective_configs/Perspective1Config.js    |  3 ++-
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/server/sparql/Filters.js b/src/server/sparql/Filters.js
index 90d9218e..7722d940 100644
--- a/src/server/sparql/Filters.js
+++ b/src/server/sparql/Filters.js
@@ -195,16 +195,20 @@ const generateIntegerFilter = ({
 }) => {
   const facetConfig = backendSearchConfig[facetClass].facets[facetID]
   const { start, end } = values
+  const typecasting = facetConfig.typecasting
+    ? facetConfig.typecasting
+    : 'BIND(xsd:integer(ROUND(?value)) as ?valueAsInteger)'
   let integerFilter = ''
   if (start === '') {
-    integerFilter = `xsd:integer(?value) <= ${end}`
+    integerFilter = `?valueAsInteger <= ${end}`
   } else if (end === '') {
-    integerFilter = `xsd:integer(?value) >= ${start}`
+    integerFilter = `?valueAsInteger >= ${start}`
   } else {
-    integerFilter = `xsd:integer(?value) >= ${start} && xsd:integer(?value) <= ${end}`
+    integerFilter = `?valueAsInteger >= ${start} && ?valueAsInteger <= ${end}`
   }
   const filterStr = `
     ?${filterTarget} ${facetConfig.predicate} ?value .
+    ${typecasting}
     FILTER(
       ${integerFilter}
     )
diff --git a/src/server/sparql/sampo/perspective_configs/Perspective1Config.js b/src/server/sparql/sampo/perspective_configs/Perspective1Config.js
index 0c44e8cd..cc74179e 100644
--- a/src/server/sparql/sampo/perspective_configs/Perspective1Config.js
+++ b/src/server/sparql/sampo/perspective_configs/Perspective1Config.js
@@ -128,7 +128,8 @@ export const perspective1Config = {
       facetValueFilter: '',
       labelPath: 'mmm-schema:height/crm:P90_has_value',
       predicate: 'mmm-schema:height/crm:P90_has_value',
-      type: 'integer'
+      type: 'integer',
+      typecasting: 'BIND(xsd:integer(ROUND(?value)) as ?valueAsInteger)'
     },
     width: {
       id: 'width',
-- 
GitLab