diff options
Diffstat (limited to 'src/queries.c')
-rw-r--r-- | src/queries.c | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/src/queries.c b/src/queries.c new file mode 100644 index 0000000..0c56cc1 --- /dev/null +++ b/src/queries.c @@ -0,0 +1,227 @@ +/* queries.c - Database stuff for ck -----------------------------------*- C -*- + * + * This file is part of ck, the config keeper + * + * ----------------------------------------------------------------------------- + * + * Copyright (C) 2018 Anastasis Grammenos + * GPLv3 (see LICENCE for the full notice) + * + * -------------------------------------------------------------------------- */ +#include "queries.h" + +void dbh_form_query_make_tables(char *query) { + char tmp[STR_L] = "CREATE TABLE "; + strcat(tmp, TBL_PROGRAM); + strcat(tmp, "("); + strcat(tmp, COL_PROGRAM_ID); + strcat(tmp, " INT NOT NULL PRIMARY KEY, "); + strcat(tmp, COL_PROGRAM_NAME); + strcat(tmp, " TEXT NOT NULL); "); + + strcat(tmp, "CREATE TABLE "); + strcat(tmp, TBL_CONFIG); + strcat(tmp, "("); + strcat(tmp, COL_CONFIG_ID); + strcat(tmp, " INT NOT NULL PRIMARY KEY, "); + strcat(tmp, COL_CONFIG_PATH); + strcat(tmp, " TEXT NOT NULL, "); + strcat(tmp, COL_CONFIG_SECRET); + strcat(tmp, " INT NOT NULL, "); + strcat(tmp, COL_CONFIG_PRIMARY); + strcat(tmp, " INT NOT NULL); "); + + strcat(tmp, "CREATE TABLE "); + strcat(tmp, TBL_REL); + strcat(tmp, "("); + strcat(tmp, COL_REL_PROGRAM_ID); + strcat(tmp, " INT NOT NULL, "); + strcat(tmp, COL_REL_CONFIG_ID); + strcat(tmp, " INT NOT NULL);"); + + strcpy(query, tmp); +} + +void dbh_form_query_insert_program(char *query) { + char tmp[STR_L] = "INSERT INTO "; + strcat(tmp, TBL_PROGRAM); + strcat(tmp, " VALUES(?, ?);"); + + strcpy(query, tmp); +} + +void dbh_form_query_insert_config(char *query) { + char tmp[STR_L] = "INSERT INTO "; + strcat(tmp, TBL_CONFIG); + strcat(tmp, " VALUES(?, ?, ?, ?);"); + + strcpy(query, tmp); +} + +void dbh_form_query_select_id_from(char *query, const char* tableName) { + char tmp[STR_M] = "SELECT ID FROM "; + strcat(tmp, tableName); + strcat(tmp, " ORDER BY ID;"); + + strcpy(query, tmp); +} + +void dbh_form_query_select_all_tables(char *query) { + strcpy(query, "SELECT * FROM SQLITE_MASTER WHERE type='table';"); +} + +void dhb_form_query_insert_relationship(char *query) { + char tmp[STR_M] = "INSERT INTO "; + strcat(tmp, TBL_REL); + strcat(tmp, " VALUES(?, ?);"); + + strcpy(query, tmp); +} + +void dhb_form_query_find_program(char *query) { + char tmp[STR_M] = "SELECT ID FROM "; + strcat(tmp, TBL_PROGRAM); + strcat(tmp, " WHERE "); + strcat(tmp, COL_PROGRAM_NAME); + strcat(tmp, " = ?;"); + + strcpy(query, tmp); +} + +void dhb_form_query_find_config(char *query) { + char tmp[STR_M] = "SELECT ID FROM "; + strcat(tmp, TBL_CONFIG); + strcat(tmp, " WHERE "); + strcat(tmp, COL_CONFIG_PATH); + strcat(tmp, " = ?;"); + + strcpy(query, tmp); +} + +void dhb_form_query_find_relationship(char *query) { + char tmp[STR_M] = "SELECT "; + strcat(tmp, COL_REL_PROGRAM_ID); + strcat(tmp, ", "); + strcat(tmp, COL_REL_CONFIG_ID); + strcat(tmp, " FROM "); + strcat(tmp, TBL_REL); + strcat(tmp, " WHERE "); + strcat(tmp, COL_REL_PROGRAM_ID); + strcat(tmp, " = ? AND "); + strcat(tmp, COL_REL_CONFIG_ID); + strcat(tmp, " = ?;"); + + strcpy(query, tmp); +} + +void dbh_form_query_select_from_joined_eq(char *query, const char *selection, const char* condition) { + char tmp[STR_L] = "SELECT "; + strcat(tmp, selection); + strcat(tmp, " FROM "); + strcat(tmp, TBL_REL); + strcat(tmp, " JOIN "); + strcat(tmp, TBL_PROGRAM); + strcat(tmp, " ON "); + strcat(tmp, TBL_PROGRAM); + strcat(tmp, "."); + strcat(tmp, COL_PROGRAM_ID); + strcat(tmp, " = "); + strcat(tmp, COL_REL_PROGRAM_ID); + strcat(tmp, " JOIN "); + strcat(tmp, TBL_CONFIG); + strcat(tmp, " ON "); + strcat(tmp, TBL_CONFIG); + strcat(tmp, "."); + strcat(tmp, COL_CONFIG_ID); + strcat(tmp, " = "); + strcat(tmp, COL_REL_CONFIG_ID); + strcat(tmp, " WHERE "); + strcat(tmp, condition); + strcat(tmp, " = ?;"); + + strcpy(query, tmp); +} + +void dbh_format_query_select_from_joined_like(char *query, const char *selection, const char* condition) { + char tmp[STR_L] = "SELECT "; + strcat(tmp, selection); + strcat(tmp, " FROM "); + strcat(tmp, TBL_REL); + strcat(tmp, " JOIN "); + strcat(tmp, TBL_PROGRAM); + strcat(tmp, " ON "); + strcat(tmp, TBL_PROGRAM); + strcat(tmp, "."); + strcat(tmp, COL_PROGRAM_ID); + strcat(tmp, " = "); + strcat(tmp, COL_REL_PROGRAM_ID); + strcat(tmp, " JOIN "); + strcat(tmp, TBL_CONFIG); + strcat(tmp, " ON "); + strcat(tmp, TBL_CONFIG); + strcat(tmp, "."); + strcat(tmp, COL_CONFIG_ID); + strcat(tmp, " = "); + strcat(tmp, COL_REL_CONFIG_ID); + strcat(tmp, " WHERE "); + strcat(tmp, condition); + strcat(tmp, " LIKE '%' || ? || '%';"); + + strcpy(query, tmp); +} + +void dbh_form_query_select_paths_with_attributes(char *query) { + char tmp[STR_L] = "SELECT "; + strcat(tmp, COL_CONFIG_PATH); + strcat(tmp, ","); + strcat(tmp, COL_CONFIG_SECRET); + strcat(tmp, ","); + strcat(tmp, COL_CONFIG_PRIMARY); + strcat(tmp, " FROM "); + strcat(tmp, TBL_CONFIG); + strcat(tmp, ";"); + + strcpy(query, tmp); +} + +void dbh_form_query_select_programs(char *query) { + char tmp[STR_L] = "SELECT "; + strcat(tmp, COL_PROGRAM_NAME); + strcat(tmp, " FROM "); + strcat(tmp, TBL_PROGRAM); + strcat(tmp, ";"); + + strcpy(query, tmp); +} + +void dbh_form_query_delete_x_from_y(char *query, const char *x, const char *y) { + char tmp[STR_M] = "DELETE FROM "; + strcat(tmp, y); + strcat(tmp, " WHERE "); + strcat(tmp, x); + strcat(tmp, " = ?;"); + + strcpy(query, tmp); +} + +void dbh_form_query_count_program_relations(char *query) { + char tmp[STR_M] = "SELECT COUNT(*) FROM "; + strcat(tmp, TBL_REL); + strcat(tmp, " WHERE "); + strcat(tmp, COL_REL_PROGRAM_ID); + strcat(tmp, " = ?;"); + + strcpy(query, tmp); +} + +void dbh_form_query_get_pid_from_cid(char *query) { + char tmp[STR_M] = "SELECT "; + strcat(tmp, COL_REL_PROGRAM_ID); + strcat(tmp, " FROM "); + strcat(tmp, TBL_REL); + strcat(tmp, " WHERE "); + strcat(tmp, COL_REL_CONFIG_ID); + strcat(tmp, " = ?;"); + + strcpy(query, tmp); +} |