#define SQL_RESOURCE_DELETE "delete from resources where resource_id = ? ;"
+#define SQL_RESOURCE_DELETE_CHILDREN "delete from resource where parent_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 = ? ;"
void *userdata;
int64_t id1;
int64_t id2;
+ int flag;
int error;
} ExecJob;
job->resource = res;
job->resultcb = resultcb;
job->userdata = userdata;
+ job->flag = 0;
job->error = 0;
//qthr_update_resource(job);
//uithr_update_resource_finished(NULL, job);
free(job);
}
-static int qthr_delete_empty_collection(ExecJob *job) {
- // only delete the resource when there are no children
- int64_t nchildren = resource_get_children(job->id1);
- if(nchildren > 0) {
- job->error = 1;
- return 0;
+#define NOTESTORE_COLLECTION_DELETE_ALL 1
+
+static int qthr_delete_collection(ExecJob *job) {
+ if(job->flag == NOTESTORE_COLLECTION_DELETE_ALL) {
+ DBUResult *result = dbuSqlExecParamInt64(connection, NULL, SQL_RESOURCE_DELETE_CHILDREN, job->id1);
+ if(!result) {
+ job->error = 3;
+ }
+ int ok = dbuResultIsOk(result);
+ dbuResultFree(result);
+ if(!ok) {
+ job->error = 4;
+ }
+ } else {
+ // only delete the resource when there are no children
+ int64_t nchildren = resource_get_children(job->id1);
+ if(nchildren > 0) {
+ job->error = 1;
+ return 0;
+ }
+ if(nchildren < 0) {
+ job->error = 2; // db error
+ return 0;
+ }
}
- if(nchildren < 0) {
- job->error = 2; // db error
- return 0;
- }
-
- DBUQuery *q = connection->createQuery(connection, NULL);
- dbuQuerySetSQL(q, SQL_RESOURCE_DELETE);
- dbuQuerySetParamInt64(q, 1, job->id1);
- if(dbuQueryExec(q)) {
- job->error = 3;
+ DBUResult *result = dbuSqlExecParamInt64(connection, NULL, SQL_RESOURCE_DELETE, job->id1);
+ if(!result) {
+ job->error = 5;
}
- dbuQueryFree(q);
+ int ok = dbuResultIsOk(result);
+ dbuResultFree(result);
+ if(!ok) {
+ job->error = 6;
+ }
+
return 0;
}
job->error = 0;
job->id1 = res->resource_id;
job->id2 = 0;
- ui_threadpool_job(queue, obj, (ui_threadfunc)qthr_delete_empty_collection, job, (ui_callback)uithr_execjob_finished, job);
+ job->flag = 0;
+ ui_threadpool_job(queue, obj, (ui_threadfunc)qthr_delete_collection, job, (ui_callback)uithr_execjob_finished, job);
+}
+
+void note_store_delete_collection_async(
+ UiObject *obj,
+ Resource *res,
+ execresult_func resultcb,
+ void *userdata)
+{
+ ExecJob *job = malloc(sizeof(ExecJob));
+ job->resource = res;
+ job->resultcb = resultcb;
+ job->userdata = userdata;
+ job->error = 0;
+ job->id1 = res->resource_id;
+ job->id2 = 0;
+ job->flag = NOTESTORE_COLLECTION_DELETE_ALL;
+ ui_threadpool_job(queue, obj, (ui_threadfunc)qthr_delete_collection, job, (ui_callback)uithr_execjob_finished, job);
}
static int qthr_delete_collection_and_move_children(ExecJob *job) {
job->error = 0;
job->id1 = res->resource_id;
job->id2 = new_parent_id;
+ job->flag = 0;
ui_threadpool_job(queue, obj, (ui_threadfunc)qthr_delete_collection_and_move_children, job, (ui_callback)uithr_execjob_finished, job);
}
job->resultcb = resultcb;
job->userdata = userdata;
job->error = 0;
+ job->flag = 0;
job->id1 = nb1->notebook_id;
job->id2 = nb2->notebook_id;
ui_threadpool_job(queue, obj, (ui_threadfunc)qthr_store_notebook_swap_position, job, (ui_callback)uithr_execjob_finished, job);