From 746f7af1c4ffbbf10de271058e930517765c9bd9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Aur=C3=A9lien=20Lamercerie?=
 <aurelien.lamercerie@tetras-libre.fr>
Date: Fri, 15 Sep 2023 12:54:14 +0200
Subject: [PATCH] New Transduction Query Builder Method to select distinct row

---
 tenet/transduction/query_builder.py | 40 ++++++++++++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)

diff --git a/tenet/transduction/query_builder.py b/tenet/transduction/query_builder.py
index 44a18620..a3e6affc 100644
--- a/tenet/transduction/query_builder.py
+++ b/tenet/transduction/query_builder.py
@@ -105,7 +105,45 @@ def generate_select_query(graph, select_data_list, clause_list):
     query_code += f'\n SELECT {select_data_part}'
     query_code += f'\n WHERE {{ {clause_part} \n }}'
     
-    return query_code    
+    return query_code   
+
+
+def generate_select_distinct_query(graph, select_data_list, clause_list):
+    """ Generate a SELECT Sparql query with a select part (from select_data_list)
+    and a clause part (from clause_list).
+
+    Parameters
+    ----------
+    graph : RDFLIB Graph
+        target graph of the query.
+    select_data_list : List
+        list of sparql variables for the select part.
+    clause_list : List
+        list of clauses (as rdf triples or string) for the clause part.
+
+    Returns
+    -------
+    query_code : SPARQL query (string)
+        SELECT Sparql query.
+
+    """
+    
+    prefix = get_prefix_def()
+    
+    first = True
+    select_data_part = ''
+    for data in select_data_list:
+        if not first: select_data_part += ' '
+        select_data_part += f'{data}' 
+        first = False
+    
+    clause_part = __define_clause_part(graph, clause_list)       
+    
+    query_code = f'{prefix}'
+    query_code += f'\n SELECT DISTINCT {select_data_part}'
+    query_code += f'\n WHERE {{ {clause_part} \n }}'
+    
+    return query_code  
 
 
 
-- 
GitLab