[tracker/wip/carlosg/joining-services: 4/5] libtracker-data: Avoid repeated variables in remote service select clause



commit 888604b0126b5ed9fa3f600d0ac9b17fefbb9a90
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed May 13 12:15:57 2020 +0200

    libtracker-data: Avoid repeated variables in remote service select clause
    
    We go through the variables used within a ServiceGraphPattern in order
    to build the SELECT clause, but don't check that those may be used multiple
    times, this results in multiple columns having the same content/name and
    corresponding waste of bandwidth.
    
    Optimize those out so each variable is only included once in the SELECT
    clause, and give use to this "variables" variable that was meant for it,
    but ignored and leaked instead.

 src/libtracker-data/tracker-sparql.c | 4 ++++
 1 file changed, 4 insertions(+)
---
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c
index 601ad3b71..6437b11d8 100644
--- a/src/libtracker-data/tracker-sparql.c
+++ b/src/libtracker-data/tracker-sparql.c
@@ -4670,6 +4670,9 @@ translate_ServiceGraphPattern (TrackerSparql  *sparql,
                var_str = _extract_node_string (node, sparql);
                var = _extract_node_variable (node, sparql);
 
+               if (g_list_find (variables, var))
+                       continue;
+
                /* Variable was used before in the graph pattern, preserve
                * for later so we join on it properly.
                */
@@ -4692,6 +4695,7 @@ translate_ServiceGraphPattern (TrackerSparql  *sparql,
        pattern_str = g_strndup (&sparql->sparql[pattern_start], pattern_end - pattern_start);
        escaped_str = _escape_sql_string (pattern_str, '"');
        g_string_append (service_sparql, escaped_str);
+       g_list_free (variables);
        g_free (pattern_str);
        g_free (escaped_str);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]