From 629ebf5b75511e3b407e3e1c0ef6baea90d9ed9f Mon Sep 17 00:00:00 2001 From: talksik Date: Sun, 3 Aug 2025 16:44:52 -0700 Subject: [PATCH] integrate sqlite with simple insert and select --- Makefile | 2 +- main | Bin 0 -> 19520 bytes main.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++--------- 3 files changed, 70 insertions(+), 13 deletions(-) create mode 100755 main diff --git a/Makefile b/Makefile index e586fa3..a636f78 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ CC = gcc CFLAGS = -Wall -g -Iinclude TARGET = main SRC = main.c -LIBS = -lcurl +LIBS = -lcurl -lsqlite3 $(TARGET): $(SRC) $(CC) $(CFLAGS) -o $(TARGET) $(SRC) $(LIBS) diff --git a/main b/main new file mode 100755 index 0000000000000000000000000000000000000000..8771e8bd02652ed6f01fc4f4f8278db2a762f121 GIT binary patch literal 19520 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 R1E #include +#include struct data_t {}; void print_help() { printf("Here is the help manual: \n" "-c | create a todo\n" - "-l | list all todos\n" - "-d | delete a particular todo\n"); + "-l | list all todos\n"); } + +// TODO: use global finalize function for sqlite handle int main(int argc, char *argv[]) { printf("Hello world \n"); - printf("Received %d arguments\n", argc); - - if (argc < 1) { - print_help(); + sqlite3 *handle; + int result = sqlite3_open("data.db", &handle); + if (result != SQLITE_OK) { + fprintf(stderr, "problem in opening database"); + return -1; } + sqlite3_stmt *statement; + result = sqlite3_prepare( + handle, "CREATE TABLE IF NOT EXISTS todos (name TEXT NOT NULL);", 1000, + &statement, NULL); + if (result != SQLITE_OK) { + fprintf(stderr, "problem in preparing sql statement"); + return -1; + } + + printf("Successfully prepared statement\n"); + + result = sqlite3_step(statement); + if (result != SQLITE_DONE) { + fprintf(stderr, "problem in step function"); + return -1; + } + + sqlite3_finalize(statement); + + printf("Received %d arguments\n", argc); for (int i = 0; i < argc; i++) { printf("Argument: %s\n", argv[i]); } - int read = 0; - char **moving_ptr = argv; - while (read < argc) { // 0 < 2, 0 < 1 - printf("Argument (ptr loop method): %s\n", *moving_ptr); - moving_ptr = moving_ptr + 1; - read++; + if (argc <= 1) { + print_help(); } + + char *first_arg = argv[1]; + if (strcmp(first_arg, "-c") == 0) { + printf("Printing argument: %s", first_arg); + + result = sqlite3_prepare(handle, "INSERT INTO todos (name) VALUES (?);", -1, + &statement, NULL); + if (result != SQLITE_OK) { + fprintf(stderr, "problem in preparing insert statement"); + return -1; + } + + sqlite3_bind_text(statement, 1, argv[2], -1, SQLITE_STATIC); + + result = sqlite3_step(statement); + if (result != SQLITE_DONE) { + fprintf(stderr, "problem in executing insert statement: %d", result); + return -1; + } + + sqlite3_finalize(statement); + } else if (strcmp(first_arg, "-l") == 0) { + result = sqlite3_prepare(handle, "SELECT name FROM todos;", -1, &statement, + NULL); + while ((result = sqlite3_step(statement)) == SQLITE_ROW) { + const char *name = (const char *)sqlite3_column_text(statement, 0); + printf("Todo: %s\n", name); + } + if (result != SQLITE_DONE) { + fprintf(stderr, "problem in executing select statement: %d", result); + return -1; + } + + sqlite3_finalize(statement); + } + + sqlite3_close(handle); }