[tracker/wip/carlosg/backports-3.3: 4/4] libtracker-data: Ensure blank node row ids are integer typed




commit fdbc8d6cf5f1f954807fc51466be67219ed23813
Author: Ray Strode <rstrode redhat com>
Date:   Fri May 6 09:54:10 2022 -0400

    libtracker-data: Ensure blank node row ids are integer typed
    
    Since commit 6cf3168302350f3fd3ef7f8bf79022950563300e tracker sometimes
    returns an unqualified row id to applications that are asking for
    a fully qualfied blank node urn.
    
    This is because sometimes it generates URN with a text type instead of
    an integer type, and so `SparqlPrintIRI` fails to recognize it as a
    blank node identifier.
    
    The result is that gnome-photos fails to match up album collections internally
    between different queries, because sometimes tracker returns the fully
    qualified urn and sometimes it returns the bare row id.
    
    This commit address the problem by introducing a cast in the query that is
    returning the row id as text instead of as an integer.
    
    Fix suggested by Carlos Garnacho.
    
    Closes https://gitlab.gnome.org/GNOME/tracker/-/issues/363
    
    (cherry-picked from commit 2a7509055e36d1d871e7da337d95f729e7d8c58d)

 src/libtracker-data/tracker-sparql.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c
index 98cd0711e..7559e5640 100644
--- a/src/libtracker-data/tracker-sparql.c
+++ b/src/libtracker-data/tracker-sparql.c
@@ -589,11 +589,11 @@ _append_literal_sql (TrackerSparql         *sparql,
                _append_string (sparql, "), ");
 
                if ((flags & TRACKER_DB_MANAGER_ANONYMOUS_BNODES) == 0) {
-                       _append_string (sparql, "NULLIF(REPLACE(");
+                       _append_string (sparql, "CAST(NULLIF(REPLACE(");
                        _append_literal_binding (sparql, binding);
                        _append_string (sparql, ", 'urn:bnode:', ''), ");
                        _append_literal_binding (sparql, binding);
-                       _append_string (sparql, "), ");
+                       _append_string (sparql, ") AS INTEGER), ");
                }
 
                _append_string (sparql, "0) ");


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