[tracker/wip/carlosg/serialize-api: 3/13] libtracker-data: Store the number of columns in select contexts




commit 6871d412408f12a45633f94e85f5750b5c2a6baa
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sun Jan 30 12:25:37 2022 +0100

    libtracker-data: Store the number of columns in select contexts
    
    Store the number of columns propagated from a TrackerSelectContext
    during SPARQL parsing. This will be useful to have.

 src/libtracker-data/tracker-sparql-types.h |  3 +++
 src/libtracker-data/tracker-sparql.c       | 14 ++++++++++++++
 2 files changed, 17 insertions(+)
---
diff --git a/src/libtracker-data/tracker-sparql-types.h b/src/libtracker-data/tracker-sparql-types.h
index e676f3f02..3829fd1d6 100644
--- a/src/libtracker-data/tracker-sparql-types.h
+++ b/src/libtracker-data/tracker-sparql-types.h
@@ -214,6 +214,9 @@ struct _TrackerSelectContext {
 
        /* Property path elements */
        GPtrArray *path_elements;
+
+       /* Number of variables retrieved in the SELECT */
+       guint n_columns;
 };
 
 struct _TrackerSelectContextClass {
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c
index 02c635056..bb62db65d 100644
--- a/src/libtracker-data/tracker-sparql.c
+++ b/src/libtracker-data/tracker-sparql.c
@@ -2891,6 +2891,7 @@ translate_SelectClause (TrackerSparql  *sparql,
 
                        tracker_sparql_swap_builder (sparql, old);
                        first = FALSE;
+                       select_context->n_columns++;
                }
        } else {
                do {
@@ -2976,6 +2977,7 @@ translate_SelectClause (TrackerSparql  *sparql,
                        }
 
                        first = FALSE;
+                       select_context->n_columns++;
                } while (TRUE);
        }
 
@@ -3284,6 +3286,7 @@ translate_ConstructQuery (TrackerSparql  *sparql,
                           GError        **error)
 {
        TrackerParserNode *node = NULL;
+       TrackerSelectContext *select_context;
        TrackerStringBuilder *old;
 
        /* ConstructQuery ::= 'CONSTRUCT' ( ConstructTemplate DatasetClause* WhereClause SolutionModifier |
@@ -3342,6 +3345,9 @@ translate_ConstructQuery (TrackerSparql  *sparql,
                }
        }
 
+       select_context = TRACKER_SELECT_CONTEXT (sparql->current_state->select_context);
+       select_context->n_columns = 3;
+
        return TRUE;
 }
 
@@ -3350,6 +3356,7 @@ translate_DescribeQuery (TrackerSparql  *sparql,
                          GError        **error)
 {
        TrackerStringBuilder *where_str = NULL;
+       TrackerSelectContext *select_context;
        TrackerVariable *variable;
        TrackerBinding *binding;
        GList *resources = NULL, *l;
@@ -3499,6 +3506,9 @@ translate_DescribeQuery (TrackerSparql  *sparql,
        g_list_free_full (resources, g_object_unref);
        g_clear_pointer (&where_str, tracker_string_builder_free);
 
+       select_context = TRACKER_SELECT_CONTEXT (sparql->current_state->select_context);
+       select_context->n_columns = 4;
+
        return TRUE;
 }
 
@@ -3507,6 +3517,7 @@ translate_AskQuery (TrackerSparql  *sparql,
                     GError        **error)
 {
        TrackerStringBuilder *str, *old;
+       TrackerSelectContext *select_context;
 
        /* AskQuery ::= 'ASK' DatasetClause* WhereClause SolutionModifier
         */
@@ -3527,6 +3538,9 @@ translate_AskQuery (TrackerSparql  *sparql,
 
        _append_string (sparql, ") WHEN 1 THEN 'true' WHEN 0 THEN 'false' ELSE NULL END");
 
+       select_context = TRACKER_SELECT_CONTEXT (sparql->current_state->select_context);
+       select_context->n_columns = 1;
+
        return TRUE;
 }
 


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