[tracker/default-values] libtracker-data: Add default value support
- From: Jürg Billeter <juergbi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/default-values] libtracker-data: Add default value support
- Date: Mon, 7 Jun 2010 08:55:00 +0000 (UTC)
commit 50872bbca4357ae71cc2623eb6c2ef6dd1e285c8
Author: Jürg Billeter <j bitron ch>
Date: Mon Jun 7 10:54:26 2010 +0200
libtracker-data: Add default value support
data/ontologies/11-rdf.ontology | 5 +++
data/ontologies/91-maemo.ontology | 3 +-
src/libtracker-data/tracker-data-manager.c | 48 ++++++++++++++++++++++++++-
src/libtracker-data/tracker-property.c | 28 ++++++++++++++++
src/libtracker-data/tracker-property.h | 3 ++
5 files changed, 84 insertions(+), 3 deletions(-)
---
diff --git a/data/ontologies/11-rdf.ontology b/data/ontologies/11-rdf.ontology
index b9e03a2..5d02162 100644
--- a/data/ontologies/11-rdf.ontology
+++ b/data/ontologies/11-rdf.ontology
@@ -112,6 +112,11 @@ tracker:weight a rdf:Property ;
rdfs:domain rdf:Property ;
rdfs:range xsd:integer .
+tracker:defaultValue a rdf:Property ;
+ nrl:maxCardinality 1 ;
+ rdfs:domain rdf:Property ;
+ rdfs:range xsd:string .
+
tracker:added a rdf:Property ;
nrl:maxCardinality 1 ;
rdfs:domain rdfs:Resource ;
diff --git a/data/ontologies/91-maemo.ontology b/data/ontologies/91-maemo.ontology
index 6649f16..34ba658 100644
--- a/data/ontologies/91-maemo.ontology
+++ b/data/ontologies/91-maemo.ontology
@@ -46,7 +46,8 @@ maemo:webhistoryThumbnail a rdf:Property ;
maemo:relevance a rdf:Property ;
nrl:maxCardinality 1 ;
rdfs:domain nie:InformationElement ;
- rdfs:range xsd:double .
+ rdfs:range xsd:double ;
+ tracker:defaultValue 2 .
# Remote media art for media player
maemo:remoteMediaArt a rdf:Property ;
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index f2e8d6e..56ffd91 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -417,6 +417,7 @@ tracker_data_ontology_load_statement (const gchar *ontology_path,
tracker_property_set_indexed (property, FALSE);
tracker_property_set_secondary_index (property, NULL);
tracker_property_set_writeback (property, FALSE);
+ tracker_property_set_default_value (property, NULL);
}
return;
}
@@ -692,6 +693,16 @@ tracker_data_ontology_load_statement (const gchar *ontology_path,
if (strcmp (object, "true") == 0) {
tracker_property_set_fulltext_no_limit (property, TRUE);
}
+ } else if (g_strcmp0 (predicate, TRACKER_PREFIX "defaultValue") == 0) {
+ TrackerProperty *property;
+
+ property = tracker_ontologies_get_property_by_uri (subject);
+ if (property == NULL) {
+ g_critical ("%s: Unknown property %s", ontology_path, subject);
+ return;
+ }
+
+ tracker_property_set_default_value (property, object);
} else if (g_strcmp0 (predicate, TRACKER_PREFIX "prefix") == 0) {
TrackerNamespace *namespace;
@@ -831,6 +842,18 @@ tracker_data_ontology_process_changes (GPtrArray *seen_classes,
tracker_class_set_db_schema_changed (class, TRUE);
tracker_property_set_db_schema_changed (property, TRUE);
}
+
+ /* there is no ALTER COLUMN => change in defaultValue not supported
+ if (update_property_value ("tracker:defaultValue", subject, TRACKER_PREFIX "defaultValue",
+ tracker_property_get_default_value (property),
+ NULL, NULL, property)) {
+ TrackerClass *class;
+ TODO
+ class = tracker_property_get_domain (property);
+ tracker_class_set_db_schema_changed (class, TRUE);
+ tracker_property_set_db_schema_changed (property, TRUE);
+ }
+ */
}
}
}
@@ -1412,7 +1435,8 @@ db_get_static_data (TrackerDBInterface *iface)
"\"tracker:isAnnotation\", "
"\"tracker:writeback\", "
"(SELECT 1 FROM \"rdfs:Resource_rdf:type\" WHERE ID = \"rdf:Property\".ID AND "
- "\"rdf:type\" = (SELECT ID FROM Resource WHERE Uri = '" NRL_INVERSE_FUNCTIONAL_PROPERTY "')) "
+ "\"rdf:type\" = (SELECT ID FROM Resource WHERE Uri = '" NRL_INVERSE_FUNCTIONAL_PROPERTY "')), "
+ "\"tracker:defaultValue\" "
"FROM \"rdf:Property\" ORDER BY ID");
if (stmt) {
@@ -1424,7 +1448,7 @@ db_get_static_data (TrackerDBInterface *iface)
while (tracker_db_cursor_iter_next (cursor, &error)) {
GValue value = { 0 };
TrackerProperty *property;
- const gchar *uri, *domain_uri, *range_uri, *secondary_index_uri;
+ const gchar *uri, *domain_uri, *range_uri, *secondary_index_uri, *default_value;
gboolean multi_valued, indexed, fulltext_indexed, fulltext_no_limit;
gboolean transient, annotation, is_inverse_functional_property;
gboolean writeback;
@@ -1523,6 +1547,8 @@ db_get_static_data (TrackerDBInterface *iface)
is_inverse_functional_property = FALSE;
}
+ default_value = tracker_db_cursor_get_string (cursor, 13);
+
tracker_property_set_is_new (property, FALSE);
tracker_property_set_transient (property, transient);
tracker_property_set_uri (property, uri);
@@ -1531,6 +1557,7 @@ db_get_static_data (TrackerDBInterface *iface)
tracker_property_set_range (property, tracker_ontologies_get_class_by_uri (range_uri));
tracker_property_set_multiple_values (property, multi_valued);
tracker_property_set_indexed (property, indexed);
+ tracker_property_set_default_value (property, default_value);
tracker_property_set_db_schema_changed (property, FALSE);
tracker_property_set_writeback (property, writeback);
@@ -1880,8 +1907,12 @@ create_decomposed_metadata_tables (TrackerDBInterface *iface,
field_name = tracker_property_get_name (property);
if (sql_type_for_single_value) {
+ const gchar *default_value;
+
/* single value */
+ default_value = tracker_property_get_default_value (property);
+
if (in_update) {
g_debug ("%sAltering database for class '%s' property '%s': single value (%s)",
in_alter ? "" : " ",
@@ -1897,6 +1928,13 @@ create_decomposed_metadata_tables (TrackerDBInterface *iface,
g_string_append_printf (create_sql, ", \"%s\" %s",
field_name,
sql_type_for_single_value);
+
+ /* add DEFAULT in case that the ontology specifies a default value,
+ assumes that default values never contain quotes */
+ if (default_value != NULL) {
+ g_string_append_printf (create_sql, " DEFAULT '%s'", default_value);
+ }
+
if (tracker_property_get_is_inverse_functional_property (property)) {
g_string_append (create_sql, " UNIQUE");
}
@@ -1923,6 +1961,12 @@ create_decomposed_metadata_tables (TrackerDBInterface *iface,
service_name,
field_name,
sql_type_for_single_value);
+
+ /* add DEFAULT in case that the ontology specifies a default value,
+ assumes that default values never contain quotes */
+ if (default_value != NULL) {
+ g_string_append_printf (alter_sql, " DEFAULT '%s'", default_value);
+ }
if (tracker_property_get_is_inverse_functional_property (property)) {
g_string_append (alter_sql, " UNIQUE");
}
diff --git a/src/libtracker-data/tracker-property.c b/src/libtracker-data/tracker-property.c
index bcb715f..9e8ad3a 100644
--- a/src/libtracker-data/tracker-property.c
+++ b/src/libtracker-data/tracker-property.c
@@ -61,6 +61,7 @@ struct _TrackerPropertyPrivate {
gboolean is_new;
gboolean db_schema_changed;
gboolean writeback;
+ gchar *default_value;
GArray *super_properties;
};
@@ -162,6 +163,8 @@ property_finalize (GObject *object)
g_array_free (priv->super_properties, TRUE);
+ g_free (priv->default_value);
+
(G_OBJECT_CLASS (tracker_property_parent_class)->finalize) (object);
}
@@ -439,6 +442,18 @@ tracker_property_get_super_properties (TrackerProperty *property)
return (TrackerProperty **) priv->super_properties->data;
}
+const gchar *
+tracker_property_get_default_value (TrackerProperty *property)
+{
+ TrackerPropertyPrivate *priv;
+
+ g_return_val_if_fail (TRACKER_IS_PROPERTY (property), NULL);
+
+ priv = GET_PRIV (property);
+
+ return priv->default_value;
+}
+
void
tracker_property_set_uri (TrackerProperty *property,
const gchar *value)
@@ -730,3 +745,16 @@ tracker_property_add_super_property (TrackerProperty *property,
g_array_append_val (priv->super_properties, value);
}
+void
+tracker_property_set_default_value (TrackerProperty *property,
+ const gchar *value)
+{
+ TrackerPropertyPrivate *priv;
+
+ g_return_if_fail (TRACKER_IS_PROPERTY (property));
+
+ priv = GET_PRIV (property);
+
+ g_free (priv->default_value);
+ priv->default_value = g_strdup (value);
+}
diff --git a/src/libtracker-data/tracker-property.h b/src/libtracker-data/tracker-property.h
index c3a2c16..5ee3561 100644
--- a/src/libtracker-data/tracker-property.h
+++ b/src/libtracker-data/tracker-property.h
@@ -91,6 +91,7 @@ gboolean tracker_property_get_multiple_values (TrackerProperty
gboolean tracker_property_get_transient (TrackerProperty *property);
gboolean tracker_property_get_is_new (TrackerProperty *property);
gboolean tracker_property_get_writeback (TrackerProperty *property);
+const gchar * tracker_property_get_default_value (TrackerProperty *property);
gboolean tracker_property_get_db_schema_changed (TrackerProperty *property);
gboolean tracker_property_get_is_inverse_functional_property
(TrackerProperty *property);
@@ -123,6 +124,8 @@ void tracker_property_set_is_new (TrackerProperty
gboolean value);
void tracker_property_set_writeback (TrackerProperty *property,
gboolean value);
+void tracker_property_set_default_value (TrackerProperty *property,
+ const gchar *value);
void tracker_property_set_db_schema_changed (TrackerProperty *property,
gboolean value);
void tracker_property_set_is_inverse_functional_property
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]