#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 ""; }