]> uap-core.de Git - note.git/commitdiff
add note_store_delete_collection_and_move_children_async
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Sun, 27 Jul 2025 10:56:16 +0000 (12:56 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Sun, 27 Jul 2025 10:56:16 +0000 (12:56 +0200)
application/store.c

index f19aa574f625b50581e786a6e78765be8ea0c381..d774d84b3f68241c0ef479f2c646061cb70edf69 100644 (file)
@@ -80,6 +80,8 @@
 
 #define SQL_RESOURCE_DELETE "delete from resources where resource_id = ? ;"
 
+#define SQL_RESOURCE_UPDATE_PARENT "update resources set parent_id = ? where parent_id = ? ;"
+
 #define SQL_RESOURCE_COUNT_CHILDREN "select count(*) from resources where parent_id = ? ;"
 
 #define SQL_ATTACHMENT_RESOURCE_NEW \
@@ -913,3 +915,40 @@ void note_store_delete_empty_collection_async(
     job->id2 = 0;
     ui_threadpool_job(queue, obj, (ui_threadfunc)qthr_delete_empty_collection, job, (ui_callback)uithr_execjob_finished, job);
 }
+
+static void qthr_delete_collection_and_move_children(ExecJob *job) {
+    // move all sub-resources to new parent
+    DBUQuery *q0 = connection->createQuery(connection, NULL);
+    dbuQuerySetSQL(q0, SQL_RESOURCE_UPDATE_PARENT);
+    dbuQuerySetParamInt64(q0, 1, job->id2);
+    dbuQuerySetParamInt64(q0, 2, job->id1);
+    if(dbuQueryExec(q0)) {
+        job->error = 3;
+    }
+    dbuQueryFree(q0);
+    
+    // delete collection
+    DBUQuery *q1 = connection->createQuery(connection, NULL);
+    dbuQuerySetSQL(q1, SQL_RESOURCE_DELETE);
+    dbuQuerySetParamInt64(q1, 1, job->id1);
+    if(dbuQueryExec(q1)) {
+        job->error = 4;
+    }
+    dbuQueryFree(q1);
+}
+
+void note_store_delete_collection_and_move_children_async(
+        UiObject *obj,
+        Resource *res,
+        int64_t new_parent_id,
+        execresult_func resultcb,
+        void *userdata)
+{
+    ExecJob *job = malloc(sizeof(ExecJob));
+    job->resultcb = resultcb;
+    job->userdata = userdata;
+    job->error = 0;
+    job->id1 = res->resource_id;
+    job->id2 = new_parent_id;
+    ui_threadpool_job(queue, obj, (ui_threadfunc)qthr_delete_empty_collection, job, (ui_callback)uithr_execjob_finished, job);
+}