#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 \
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);
+}