#include "../../include/database.h" #include "../../include/package.h" #include "../../include/error.h" #include "../../include/util.h" #include #include #include #include char *queries[] = { "CREATE TABLE IF NOT EXISTS packages (" \ " name TEXT PRIMARY KEY NOT NULL," \ " desc TEXT NOT NULL," \ " version TEXT NOT NULL," \ " size INT NOT NULL," \ " depends TEXT NOT NULL);", "INSERT INTO packages VALUES (?, ?, ?, ?, ?)", "SELECT * FROM packages WHERE name = '?'", "DELETE from packages WHERE name = '?'", }; lm_database_t *lm_database_new(char *path){ lm_database_t *db = malloc(sizeof(lm_database_t)); char *err = NULL; bzero(db, sizeof(lm_database_t)); if(exists(path) && (is_file(path) || !can_read(path) || !can_write(path))){ lm_error_set(LM_ERR_DbCantAccess); return NULL; } char dbfile[strlen(path)+20]; join(dbfile, path, "packages.db"); if(sqlite3_open(dbfile, &db->sql)){ pdebug(__func__, "(%s) failed to open databse: %s", path, sqlite3_errmsg(db->sql)); lm_error_set(LM_ERR_DbSqlOpenFail); return NULL; } if(sqlite3_exec(db->sql, queries[QUERY_CREATE_TABLE], NULL, 0, &err) != SQLITE_OK){ pdebug(__func__, "(%s) failed to create packages table: %s", path, err); lm_error_set(LM_ERR_DbSqlCreateFail); sqlite3_free(err); } db->dir = strdup(path); return db; } void lm_database_free(lm_database_t *db){ sqlite3_close(db->sql); free(db->dir); lm_pkg_t *cur = db->pkg, *prev = NULL; while(NULL != cur){ prev = cur; cur = cur->next; lm_package_free(prev); } free(db); }