summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--main.c122
2 files changed, 55 insertions, 71 deletions
diff --git a/Makefile b/Makefile
index c8b28bd..0676ea5 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
SHELL=/bin/sh
-CC=clang
+CC=gcc
SRCDIR=.
PREFIX=/usr/local
@@ -8,7 +8,7 @@ BINDIR=/bin
INSTALL_PROGRAM=install
INSTALL_DATA=install -m 644
-CFLAGS=-Wall -Wextra -O3 -ggdb
+CFLAGS=-Wall -Wextra
LIBS=-lsqlite3
BIN=myal
diff --git a/main.c b/main.c
index daa73bf..77511c4 100644
--- a/main.c
+++ b/main.c
@@ -23,21 +23,23 @@ void exit_with_error(sqlite3 *db, const char *msg)
exit(69);
}
-void select_from_table(sqlite3 *db, char *table_name, char *q_param)
+void select_from_table(sqlite3 *db, char *tblName, char *qp)
{
- char *zErrMsg = 0;
char *sql;
int rc;
- const unsigned char *name, *episode, *status;
- char *type;
+ const unsigned char *name, *value, *status;
+ const char *type;
+ char *query_param = malloc(strlen(qp) + 2);
+ int id;
- if (!strcmp(table_name, "anime")) {
- strcpy(type, "Episode");
- sql = "SELECT NAME, EPISODE, STATUS FROM anime WHERE NAME LIKE ?1 ORDER BY ID;";
- } else if (!strcmp(table_name, "manga")) {
- strcpy(type, "Chapter");
- sql = "SELECT NAME, CHAPTER, STATUS FROM manga WHERE NAME LIKE ?1 ORDER BY ID;";
+
+ if (!strcmp(tblName, "anime")) {
+ type = "Episode";
+ sql = "SELECT * FROM anime WHERE NAME LIKE ?1 ORDER BY ID;";
+ } else if (!strcmp(tblName, "manga")) {
+ type = "Chapter";
+ sql = "SELECT * manga WHERE NAME LIKE ?1 ORDER BY ID;";
} else {
fprintf(stderr, "table does not exist...\n");
sqlite3_close(db);
@@ -45,37 +47,46 @@ void select_from_table(sqlite3 *db, char *table_name, char *q_param)
}
sqlite3_stmt *stmt;
- sprintf(q_param, "%s%%", q_param);
+ snprintf(query_param, strlen(qp) + 2, "%s%%", qp);
rc = sqlite3_prepare_v2(db, sql, -1, &stmt, 0);
if (rc != SQLITE_OK) {
exit_with_error(db, "failure fetching data: ");
}
- sqlite3_bind_text(stmt, 1, q_param, -1, SQLITE_STATIC);
+ sqlite3_bind_text(stmt, 1, query_param, -1, SQLITE_TRANSIENT);
while(sqlite3_step(stmt) == SQLITE_ROW) {
- name = sqlite3_column_text(stmt, 0);
- episode = sqlite3_column_text(stmt, 1);
- status = sqlite3_column_text(stmt, 2);
- printf("%s, %s %s, %s\n", name, type, episode, status);
+ id = sqlite3_column_int(stmt, 0);
+ name = sqlite3_column_text(stmt, 1);
+ value = sqlite3_column_text(stmt, 2);
+ status = sqlite3_column_text(stmt, 3);
+ printf("%03d: %s, %s %s, %s\n", id, name, type, value, status);
}
sqlite3_finalize(stmt);
+ free(query_param);
}
-void update_ep(sqlite3 *db, char *table_name, char *q_param, char *value)
+void update_entry(sqlite3 *db, char *tblName, char *qp, char *value, char *status)
{
- char *zErrMsg = 0;
char *sql;
int rc;
sqlite3_stmt *stmt;
- if (!strcmp(table_name, "anime")) {
- sql = "UPDATE anime SET EPISODE=?1 WHERE NAME=?2;";
- } else if (!strcmp(table_name, "manga")) {
- sql = "UPDATE manga SET CHAPTER=?1 WHERE NAME=?2;";
+ if (!strcmp(tblName, "anime")) {
+ if (status == NULL) {
+ sql = "UPDATE anime SET EPISODE=?1 WHERE NAME=?2;";
+ } else {
+ sql = "UPDATE anime SET EPISODE=?1, STATUS=?2 WHERE NAME=?3;";
+ }
+ } else if (!strcmp(tblName, "manga")) {
+ if (status == NULL) {
+ sql = "UPDATE manga SET CHAPTER=?1 WHERE NAME=?2;";
+ } else {
+ sql = "UPDATE manga SET CHAPTER=?1, STATUS=?2 WHERE NAME=?3;";
+ }
} else {
fprintf(stderr, "table does not exist...\n");
sqlite3_close(db);
@@ -87,54 +98,29 @@ void update_ep(sqlite3 *db, char *table_name, char *q_param, char *value)
exit_with_error(db, "failure fetching data: ");
}
- sqlite3_bind_text(stmt, 1, value, -1, SQLITE_STATIC);
- sqlite3_bind_text(stmt, 2, q_param, -1, SQLITE_STATIC);
-
- rc = sqlite3_step(stmt);
- sqlite3_finalize(stmt);
-}
-
-void update_status(sqlite3 *db, char *table_name, char *q_param, char *value)
-{
- char *zErrMsg = 0;
- char *sql;
- int rc;
-
- sqlite3_stmt *stmt;
-
- if (!strcmp(table_name, "anime")) {
- sql = "UPDATE anime SET STATUS=?1 WHERE NAME=?2;";
- } else if (!strcmp(table_name, "manga")) {
- sql = "UPDATE manga SET STATUS=?1 WHERE NAME=?2;";
+ if (status == NULL) {
+ sqlite3_bind_text(stmt, 1, value, -1, SQLITE_STATIC);
+ sqlite3_bind_text(stmt, 2, qp, -1, SQLITE_STATIC);
} else {
- fprintf(stderr, "table does not exist...\n");
- sqlite3_close(db);
- exit(69);
+ sqlite3_bind_text(stmt, 1, value, -1, SQLITE_STATIC);
+ sqlite3_bind_text(stmt, 2, status, -1, SQLITE_STATIC);
+ sqlite3_bind_text(stmt, 3, qp, -1, SQLITE_STATIC);
}
- rc = sqlite3_prepare_v2(db, sql, -1, &stmt, 0);
- if (rc != SQLITE_OK) {
- exit_with_error(db, "failure fetching data: ");
- }
-
- sqlite3_bind_text(stmt, 1, value, -1, SQLITE_STATIC);
- sqlite3_bind_text(stmt, 2, q_param, -1, SQLITE_STATIC);
-
rc = sqlite3_step(stmt);
sqlite3_finalize(stmt);
}
-void add_entry(sqlite3 *db, char *table_name, char *name, char *episode, char *status)
+void add_entry(sqlite3 *db, char *tblName, char *name, char *value, char *status)
{
- char *zErrMsg = 0;
char *sql;
int rc;
sqlite3_stmt *stmt;
- if (!strcmp(table_name, "anime")) {
+ if (!strcmp(tblName, "anime")) {
sql = "INSERT INTO anime (NAME, EPISODE, STATUS) VALUES (?1, ?2, ?3);";
- } else if (!strcmp(table_name, "manga")) {
+ } else if (!strcmp(tblName, "manga")) {
sql = "INSERT INTO manga (NAME, CHAPTER, STATUS) VALUES (?1, ?2, ?3);";
} else {
fprintf(stderr, "table does not exist...\n");
@@ -148,7 +134,7 @@ void add_entry(sqlite3 *db, char *table_name, char *name, char *episode, char *s
}
sqlite3_bind_text(stmt, 1, name, -1, SQLITE_STATIC);
- sqlite3_bind_text(stmt, 2, episode, -1, SQLITE_STATIC);
+ sqlite3_bind_text(stmt, 2, value, -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 3, status, -1, SQLITE_STATIC);
rc = sqlite3_step(stmt);
@@ -161,7 +147,7 @@ int main(int argc, char **argv)
fprintf(stderr, "missing argument...\n");
exit(69);
}
- char *mode, *target, *name, *episode, *status;
+ char *mode, *target, *name, *value, *status;
mode = argv[1];
target = argv[2];
name = argv[3];
@@ -183,25 +169,23 @@ int main(int argc, char **argv)
sqlite3_close(db);
exit(69);
}
- episode = argv[4];
- update_ep(db, target, name, episode);
- } else if (!strcmp(mode, "status")) {
- if (argc < 5) {
- fprintf(stderr, "missing argument...\n");
- sqlite3_close(db);
- exit(69);
+ if (argc == 5) {
+ value = argv[4];
+ update_entry(db, target, name, value, NULL);
+ } else if (argc == 6) {
+ value = argv[4];
+ status = argv[5];
+ update_entry(db, target, name, value, status);
}
- status = argv[4];
- update_status(db, target, name, status);
} else if (!strcmp(mode, "add")) {
if (argc < 6) {
fprintf(stderr, "missing argument...\n");
sqlite3_close(db);
exit(69);
}
- episode = argv[4];
+ value = argv[4];
status = argv[5];
- add_entry(db, target, name, episode, status);
+ add_entry(db, target, name, value, status);
} else {
fprintf(stderr, "unknown option...\n");
sqlite3_close(db);