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



commit 1377cab987d3968bd30d120004c9b9403b319892
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 010f750f6..20d92232f 100644
--- a/src/libtracker-data/tracker-sparql.c
+++ b/src/libtracker-data/tracker-sparql.c
@@ -4698,6 +4698,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.
                */
@@ -4720,6 +4723,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]