prototype for using sqlite
This commit is contained in:
127
db.c
Normal file
127
db.c
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sqlite3.h>
|
||||||
|
|
||||||
|
// Callback function taken from https://sqlite.org/quickstart.html
|
||||||
|
static int print_callback(void *NotUsed, int argc, char **argv, char **azColName){
|
||||||
|
for(size_t i=0; i<argc; i++){
|
||||||
|
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* get_website_from_url(const char *url) {
|
||||||
|
char *tmp = strstr(url, "rule34.xxx");
|
||||||
|
if (tmp != NULL) {
|
||||||
|
return "Rule34";
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* get_artist_from_url(const char *url, const char *website_name) {
|
||||||
|
size_t offset = 0;
|
||||||
|
if (strcmp(website_name, "Rule34") == 0) {
|
||||||
|
offset = 51;
|
||||||
|
} else if (strcmp(website_name, "Iwara") == 0) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
if (offset == 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t i;
|
||||||
|
for (i = 0; url[offset+i] != '\0'; i++) {}
|
||||||
|
char *artist_name = malloc(i+1); // since this is programs halts soon, I dont need to free this manually
|
||||||
|
memcpy(artist_name, url + offset, i);
|
||||||
|
artist_name[i] = '\0';
|
||||||
|
|
||||||
|
return artist_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool add(sqlite3 *db, const char *url) {
|
||||||
|
char *sql;
|
||||||
|
int result;
|
||||||
|
char *error_msg;
|
||||||
|
|
||||||
|
const char *website_name = get_website_from_url(url);
|
||||||
|
if (website_name == NULL) {
|
||||||
|
fprintf(stderr, "Couldn't get website_name from url %s\n", url);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const char *artist_name = get_artist_from_url(url, website_name);
|
||||||
|
if (artist_name == NULL) {
|
||||||
|
fprintf(stderr, "Couldn't get artist_name from url %s\n", url);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf(sql, "INSERT INTO hentai VALUES ('%s', '%s', '%s');", url, artist_name, website_name);
|
||||||
|
result = sqlite3_exec(db, sql, print_callback, 0, &error_msg);
|
||||||
|
if (result != SQLITE_OK) {
|
||||||
|
fprintf(stderr, "SQL error: %s\n", error_msg);
|
||||||
|
sqlite3_free(error_msg);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
sqlite3 *db;
|
||||||
|
int result;
|
||||||
|
char *error_msg;
|
||||||
|
char *sql;
|
||||||
|
bool successful;
|
||||||
|
|
||||||
|
result = sqlite3_open(":memory:", &db);
|
||||||
|
if (result != SQLITE_OK || db == NULL) {
|
||||||
|
fprintf(stderr, "Couldn't create or open db: %s\n", sqlite3_errmsg(db));
|
||||||
|
sqlite3_close(db);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sql = "CREATE TABLE IF NOT EXISTS hentai (url TEXT PRIMARY KEY NOT NULL, artist_name TEXT NOT NULL, website_name TEXT NOT NULL) STRICT;";
|
||||||
|
result = sqlite3_exec(db, sql, print_callback, 0, &error_msg);
|
||||||
|
if (result != SQLITE_OK) {
|
||||||
|
fprintf(stderr, "SQL error: %s\n", error_msg);
|
||||||
|
sqlite3_free(error_msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("argc = %d\n", argc);
|
||||||
|
printf("argv = {\n");
|
||||||
|
for (int i = 0; i < argc; i++) {
|
||||||
|
printf("\t%s\n", argv[i]);
|
||||||
|
}
|
||||||
|
printf("}\n");
|
||||||
|
|
||||||
|
if (argc < 2) {
|
||||||
|
fprintf(stderr, "Incorrect amount of arguments\n");
|
||||||
|
// TODO: print_usage();
|
||||||
|
sqlite3_close(db);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(argv[1], "add") == 0) {
|
||||||
|
successful = add(db, argv[2]);
|
||||||
|
if (!successful) {
|
||||||
|
sqlite3_close(db);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Invalid argument\n");
|
||||||
|
sqlite3_close(db);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sql = "SELECT * FROM hentai;";
|
||||||
|
result = sqlite3_exec(db, sql, print_callback, 0, &error_msg);
|
||||||
|
if (result != SQLITE_OK) {
|
||||||
|
fprintf(stderr, "SQL error: %s\n", error_msg);
|
||||||
|
sqlite3_free(error_msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlite3_close(db);
|
||||||
|
return 0;
|
||||||
|
}
|
Reference in New Issue
Block a user