[Tracker] Database access abstraction
- From: Jürg Billeter <j bitron ch>
- To: Tracker-List <tracker-list gnome org>
- Subject: [Tracker] Database access abstraction
- Date: Mon, 20 Oct 2008 20:07:18 +0200
Hi all,
as a preparation to support decomposed database tables in Tracker, I've
been looking into how we could abstract database access so that the
database schema can change without affecting the code in trackerd and
tracker-indexer.
I'm proposing to introduce an additional (private) library that acts as
a high-level database interface, so it sits between libtracker-db and
trackerd/tracker-indexer. That library, let's call it libtracker-data
for now, is the only place where SQL queries get constructed.
As a first step, we should probably just move relevant functions or
function parts from trackerd and tracker-indexer to the new library and
refactor and extend the library later. Looking at the current code, the
API of libtracker-data would be composed of the following parts:
* Ontology/Schema API
These functions don't query the actual data or metadata but only the
ontology/schema and its mapping to the database layout. They are
currently part of trackerd/tracker-db.c
tracker_db_metadata_get_related_names
tracker_db_metadata_get_table
tracker_db_get_field_name
tracker_db_get_metadata_field
tracker_db_create_array_of_services
tracker_db_xesam_get_metadata_names
tracker_db_xesam_get_all_text_metadata_names
tracker_db_xesam_get_service_names
* Service/Metadata Query API
These functions query information about a specific service/resource,
for example, path to id mapping and metadata retrieval. They are
currently part of trackerd/tracker-db.c and
tracker-indexer/tracker-indexer-db.c
tracker_db_metadata_get
tracker_db_metadata_get_all
tracker_db_metadata_get_array
tracker_db_metadata_get_delimited
tracker_db_get_all_metadata
tracker_db_get_parsed_metadata
tracker_db_get_unparsed_metadata
tracker_db_get_property_values
tracker_db_check_service
tracker_db_get_service_type
tracker_db_service_get_by_entity
tracker_db_file_get_id
tracker_db_file_get_id_as_string
* Search and General Query API
These functions perform arbitrary queries on the whole database. They
are currently part of tracker-db.c, tracker-metadata.c,
tracker-search.c, tracker-keywords.c, and tracker-files.c in trackerd
tracker_db_search_text
tracker_db_search_text_and_mime
tracker_db_search_text_and_location
tracker_db_search_text_and_mime_and_location
tracker_db_live_search_start
tracker_db_live_search_stop
tracker_db_live_search_get_all_ids
tracker_db_live_search_get_new_ids
tracker_db_live_search_get_deleted_ids
tracker_db_live_search_get_hit_data
tracker_db_live_search_get_hit_count
tracker_db_keywords_get_list
tracker_db_files_get
tracker_db_files_get_by_service
tracker_db_files_get_by_mime
tracker_db_create_event
tracker_db_xesam_delete_handled_events
tracker_data_get_unique_values
tracker_data_get_sum
tracker_data_get_count
tracker_data_get_unique_values_with_count
tracker_data_get_unique_values_with_count_and_sum
tracker_data_get_metadata_for_files_in_folder
tracker_data_keywords_search
tracker_data_search_query
The tracker_data_* signify the database access parts of the D-Bus
service methods. The actual D-Bus method implementations stay at
their place, of course.
* Update API
These functions are used to modify data and metadata, they are only
executed by the indexer and currently reside in
tracker-indexer/tracker-indexer-db.c
tracker_db_get_new_service_id
tracker_db_create_service
tracker_db_delete_service
tracker_db_delete_service_recursively
tracker_db_move_service
tracker_db_increment_stats
tracker_db_decrement_stats
tracker_db_set_metadata
tracker_db_delete_all_metadata
tracker_db_delete_metadata
tracker_db_set_text
tracker_db_get_text
tracker_db_delete_text
We also need to move trackerd/tracker-query-tree.c,
trackerd/tracker-rdf-query.c, trackerd/tracker-xesam-query, and
tracker-indexer/tracker-metadata.c to the new library as they generate
SQL queries or are used by other functions in libtracker-data.
Any comments or suggestions about this, does the grouping seem sensible?
Please note that I don't know Tracker's code base very well yet, so I
might be missing or misunderstanding some things.
Regards,
JÃrg
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]