blist/src/main/sql.c
2025-06-08 01:08:04 +02:00

77 lines
4.6 KiB
C

#include "include/sql.h"
const char *klist_sql_get(const enum KLIST_SQL sql) {
switch (sql) {
case INIT: return
"create table if not exists users (\n"
" id integer primary key,\n"
" name text not null\n"
");\n"
"create table if not exists user_logins (\n"
" id integer primary key,\n"
" user_id integer not null,\n"
" local_id integer,\n"
" foreign key (user_id) references users(id)"
");\n"
"create table if not exists user_lists (\n"
" id integer primary key,\n"
" user_id integer not null,\n"
" list_id integer not null,\n"
" foreign key (user_id) references users(id),\n"
" foreign key (list_id) references lists(id)\n"
");\n"
"create table if not exists lists (\n"
" id integer primary key,\n"
" name text not null,\n"
" desc text,\n"
" is_preset int not null\n"
");\n"
"create table if not exists task_stages (\n"
" id integer primary key,\n"
" name text not null,\n"
" desc text,\n"
" list_id integer not null,\n"
" foreign key (list_id) references lists(id)\n"
");\n"
"-- this currently enables moving tasks _between lists_ (planned of course)\n"
"create table if not exists tasks (\n"
" id integer primary key,\n"
" name text not null,\n"
" desc text,\n"
" stage integer not null,\n"
" due date,\n"
" target_stage integer, -- more like target stage\n"
" foreign key (stage) references task_stages(id),\n"
" foreign key (target_stage) references task_stages(id)\n"
")";
case ADD_LOGIN: return "insert into user_logins (user_id, local_id) values (?1, ?2) on conflict (id) do update set user_id=excluded.user_id, local_id=excluded.local_id returning id";
case ADD_USER: return "insert into users (name) values (?1) on conflict (id) do update set name=excluded.name returning id";
case GET_USER: return "select users.*, user_logins.local_id from users inner join user_logins on user_logins.user_id = users.id where users.id = ?1";
case GET_USER_BY_LOCAL: return "select * from users inner join user_logins on user_logins.user_id = users.id where user_logins.local_id = ?1";
case GET_USERS: return "select * from users";
case MOD_USER_NAME: return "update users set name = ?1 where id = ?2";
case DEL_USER: return "delete from users where id = ?1";
case ADD_LIST: return "insert into lists (name, desc, is_preset) values (?1, ?2, ?3)";
case GET_LIST: return "select * from lists where id = ?1";
case GET_LISTS: return "select * from lists";
case GET_LISTS_BY_USER: return "select * from lists inner join user_lists on user_lists.list_id = lists.id where user_lists.user_id = ?1";
case GET_LISTS_BY_USER_NAME: return "select * from lists inner join user_lists on user_lists.list_id = lists.id where user_lists.user_id = ?1 and lists.name like '?2'";
case MOD_LIST_NAME: return "update lists set name = ?1 where id = ?2";
case DEL_LIST: return "delete from lists where id = ?1";
case ADD_STAGE: return "insert into task_stages (name, desc, list_id) values (?1, ?2, ?3)";
case GET_STAGE: return "select * from task_stages where id = ?1";
case GET_STAGES_FOR_LIST: return "select * from task_stages where list_id = ?1";
case DEL_STAGE: return "delete from task_stages where id = ?1";
case ADD_TASK: return "insert into tasks (name, desc, stage, due, target_stage) values (?1, ?2, ?3, ?4, ?5);";
case GET_TASK: return "select * from tasks where id = ?1";
case GET_TASKS: return "select * from tasks;";
case GET_TASKS_FOR_LIST: return "select tasks.* from tasks join task_stages on task_stages.id = tasks.stage where task_stages.list_id = ?1";
case GET_TASKS_FOR_LIST_BY_NAME: return "select tasks.* from tasks join task_stages on task_stages.id = tasks.stage where task_stages.list_id = ?1 and tasks.name like ?2";
case MOD_TASK_NAME: return "update tasks set name = ?1 where id = ?2";
case MOD_TASK_DESCRIPTION: return "update tasks set desc = ?1 where id = ?2";
case DEL_TASK: return "delete from tasks where id = ?1";
case _KLIST_SQL_COUNT: return "";
}
return "";
}