Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package tracker for openSUSE:Factory checked 
in at 2021-11-15 00:06:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/tracker (Old)
 and      /work/SRC/openSUSE:Factory/.tracker.new.1890 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "tracker"

Mon Nov 15 00:06:09 2021 rev:144 rq:930386 version:3.2.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/tracker/tracker.changes  2021-11-06 
18:17:42.220874390 +0100
+++ /work/SRC/openSUSE:Factory/.tracker.new.1890/tracker.changes        
2021-11-15 00:06:09.615593030 +0100
@@ -1,0 +2,7 @@
+Tue Nov  9 08:25:17 UTC 2021 - Alynx Zhou <alynx.z...@suse.com>
+
+- Add tracker-fix-actual-0-path-matches.patch: Fix no metadata
+  available when using tracker3 info caused by a wrong sparql
+  implementation. (bsc#1191207, glgo#GNOME/tracker#337)
+
+-------------------------------------------------------------------

New:
----
  tracker-fix-actual-0-path-matches.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ tracker.spec ++++++
--- /var/tmp/diff_new_pack.oFfWZm/_old  2021-11-15 00:06:10.123593443 +0100
+++ /var/tmp/diff_new_pack.oFfWZm/_new  2021-11-15 00:06:10.127593447 +0100
@@ -28,6 +28,8 @@
 Group:          Productivity/Other
 URL:            https://wiki.gnome.org/Projects/Tracker
 Source0:        
https://download.gnome.org/sources/tracker/3.2/%{name}-%{version}.tar.xz
+# PATCH-FIX-UPSTREAM tracker-fix-actual-0-path-matches.patch bsc#1191207, 
glgo#GNOME/tracker#337 alynx.z...@suse.com -- Fix no metadata available when 
using tracker3 info
+Patch1:         tracker-fix-actual-0-path-matches.patch
 
 BuildRequires:  asciidoc
 BuildRequires:  fdupes

++++++ tracker-fix-actual-0-path-matches.patch ++++++
>From ad0f8ab4a83cb8ecd2bb55619d06cc6544e45f7d Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carl...@gnome.org>
Date: Sun, 7 Nov 2021 13:54:01 +0100
Subject: [PATCH] libtracker-sparql: Fix actual 0-path matches in ? and * path
 operators

These operators ("zero or one" and "zero or more" respectively) so far have
worked on the prerequisite that the contained property path has at least
one match with the given constraints. E.g.:

  SELECT ?u { <URI> nie:interpretedAs? ?u }

Would return no results if the given uri had no nie:interpretedAs, but here
we still want to have the 0-length match, regardless of there being a match
or not.

This commit fixes this by making these common table expressions look for
"self" in the rdfs:Resource table, this is ensured to always match as long
as the resource exists.

Fixes: https://gitlab.gnome.org/GNOME/tracker/-/issues/337
---
 src/libtracker-data/tracker-sparql.c | 43 ++++++++++++++++++++++++----
 1 file changed, 37 insertions(+), 6 deletions(-)

diff --git a/src/libtracker-data/tracker-sparql.c 
b/src/libtracker-data/tracker-sparql.c
index d12786e45..f6d42228a 100644
--- a/src/libtracker-data/tracker-sparql.c
+++ b/src/libtracker-data/tracker-sparql.c
@@ -895,10 +895,42 @@ _prepend_path_element (TrackerSparql      *sparql,
 {
        TrackerStringBuilder *old;
        gchar *table_name, *graph_column;
+       gchar *zero_length_match = NULL;
 
        if (path_elem->op == TRACKER_PATH_OPERATOR_NONE &&
            tracker_token_is_empty (&sparql->current_state->graph)) {
                tracker_sparql_add_union_graph_subquery (sparql, 
path_elem->data.property);
+       } else if (path_elem->op == TRACKER_PATH_OPERATOR_ZEROORONE ||
+                  path_elem->op == TRACKER_PATH_OPERATOR_ZEROORMORE) {
+               const gchar *graph;
+
+               graph = tracker_token_get_idstring 
(&sparql->current_state->graph);
+
+               if (tracker_token_is_empty (&sparql->current_state->graph) ||
+                   tracker_token_get_variable (&sparql->current_state->graph)) 
{
+                       TrackerOntologies *ontologies;
+                       TrackerClass *rdfs_resource;
+
+                       ontologies = tracker_data_manager_get_ontologies 
(sparql->data_manager);
+                       rdfs_resource = tracker_ontologies_get_class_by_uri 
(ontologies, RDFS_NS "Resource");
+                       tracker_sparql_add_union_graph_subquery_for_class 
(sparql,
+                                                                          
rdfs_resource);
+
+                       zero_length_match = g_strdup_printf ("SELECT ID, ID, 
graph, %d, %d "
+                                                            "FROM 
\"unionGraph_rdfs:Resource\"",
+                                                            
TRACKER_PROPERTY_TYPE_RESOURCE,
+                                                            
TRACKER_PROPERTY_TYPE_RESOURCE);
+               } else if (tracker_sparql_find_graph (sparql, graph)) {
+                       zero_length_match = g_strdup_printf ("SELECT ID, ID, 
%d, %d, %d "
+                                                            "FROM 
\"%s\".\"rdfs:Resource\"",
+                                                            
tracker_sparql_find_graph (sparql, graph),
+                                                            
TRACKER_PROPERTY_TYPE_RESOURCE,
+                                                            
TRACKER_PROPERTY_TYPE_RESOURCE,
+                                                            graph);
+               } else {
+                       /* Graph does not exist, ensure to come back empty */
+                       zero_length_match = g_strdup ("SELECT * FROM (SELECT 0 
AS ID, NULL, NULL, 0, 0 LIMIT 0)");
+               }
        }
 
        old = tracker_sparql_swap_builder (sparql, 
sparql->current_state->with_clauses);
@@ -991,14 +1023,13 @@ _prepend_path_element (TrackerSparql      *sparql,
                                       "(SELECT ID, value, graph, ID_type, 
value_type "
                                       "FROM \"%s_helper\" "
                                       "UNION "
-                                      "SELECT ID, ID, graph, ID_type, ID_type "
-                                      "FROM \"%s\" "
+                                      "%s "
                                       "UNION "
                                       "SELECT value, value, graph, value_type, 
value_type "
                                       "FROM \"%s\") ",
                                       path_elem->name,
                                       path_elem->name,
-                                      path_elem->data.composite.child1->name,
+                                      zero_length_match,
                                       path_elem->data.composite.child1->name);
                break;
        case TRACKER_PATH_OPERATOR_ONEORMORE:
@@ -1018,8 +1049,7 @@ _prepend_path_element (TrackerSparql      *sparql,
        case TRACKER_PATH_OPERATOR_ZEROORONE:
                _append_string_printf (sparql,
                                       "\"%s\" (ID, value, graph, ID_type, 
value_type) AS "
-                                      "(SELECT ID, ID, graph, ID_type, ID_type 
"
-                                      "FROM \"%s\" "
+                                      "(%s "
                                       "UNION "
                                       "SELECT ID, value, graph, ID_type, 
value_type "
                                       "FROM \"%s\" "
@@ -1027,7 +1057,7 @@ _prepend_path_element (TrackerSparql      *sparql,
                                       "SELECT value, value, graph, value_type, 
value_type "
                                       "FROM \"%s\") ",
                                       path_elem->name,
-                                      path_elem->data.composite.child1->name,
+                                      zero_length_match,
                                       path_elem->data.composite.child1->name,
                                       path_elem->data.composite.child1->name);
                break;
@@ -1075,6 +1105,7 @@ _prepend_path_element (TrackerSparql      *sparql,
        }
 
        tracker_sparql_swap_builder (sparql, old);
+       g_free (zero_length_match);
 }
 
 static inline gchar *
-- 
GitLab

Reply via email to