summaryrefslogtreecommitdiff
path: root/src/libtracker-sparql/direct/tracker-direct.c
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2023-01-17 02:41:14 +0100
committerCarlos Garnacho <carlosg@gnome.org>2023-01-17 11:29:27 +0100
commite62bef8e0cdbc27a80ea914e5812c9e502614fdd (patch)
tree21856b2ec73e043797ca6201e411d82b76ad2c30 /src/libtracker-sparql/direct/tracker-direct.c
parente5d3f19acdc6188cf39d0a98555e076002823594 (diff)
downloadtracker-e62bef8e0cdbc27a80ea914e5812c9e502614fdd.tar.gz
direct: Wrap tracker_sparql_statement_execute() in transaction
This was missing here.
Diffstat (limited to 'src/libtracker-sparql/direct/tracker-direct.c')
-rw-r--r--src/libtracker-sparql/direct/tracker-direct.c34
1 files changed, 28 insertions, 6 deletions
diff --git a/src/libtracker-sparql/direct/tracker-direct.c b/src/libtracker-sparql/direct/tracker-direct.c
index ab97a90bb..30e6526fe 100644
--- a/src/libtracker-sparql/direct/tracker-direct.c
+++ b/src/libtracker-sparql/direct/tracker-direct.c
@@ -294,10 +294,18 @@ update_thread_func (gpointer data,
case TASK_TYPE_UPDATE_STATEMENT: {
UpdateStatement *data = task_data->data;
- tracker_direct_statement_execute_update (data->stmt,
- data->parameters,
- NULL,
- &error);
+ tracker_data_begin_transaction (tracker_data, &error);
+ if (error)
+ break;
+
+ if (tracker_direct_statement_execute_update (data->stmt,
+ data->parameters,
+ NULL,
+ &error)) {
+ tracker_data_commit_transaction (tracker_data, &error);
+ } else {
+ tracker_data_rollback_transaction (tracker_data);
+ }
break;
}
case TASK_TYPE_RELEASE_MEMORY:
@@ -1732,13 +1740,27 @@ tracker_direct_connection_execute_update_statement (TrackerDirectConnection *co
GError **error)
{
TrackerDirectConnectionPrivate *priv;
+ TrackerData *tracker_data;
GError *inner_error = NULL;
priv = tracker_direct_connection_get_instance_private (conn);
g_mutex_lock (&priv->mutex);
- tracker_direct_statement_execute_update (stmt, parameters, NULL, &inner_error);
- tracker_direct_connection_update_timestamp (conn);
+
+ tracker_data = tracker_data_manager_get_data (priv->data_manager);
+ tracker_data_begin_transaction (tracker_data, &inner_error);
+ if (inner_error)
+ goto out;
+
+ if (tracker_direct_statement_execute_update (stmt, parameters, NULL, &inner_error)) {
+ tracker_data_commit_transaction (tracker_data, &inner_error);
+ if (!inner_error)
+ tracker_direct_connection_update_timestamp (conn);
+ } else {
+ tracker_data_rollback_transaction (tracker_data);
+ }
+
+ out:
g_mutex_unlock (&priv->mutex);
if (inner_error) {