new: cleaning up functions, base implementation of install function
This commit is contained in:
@ -18,6 +18,7 @@ char *queries[] = {
|
||||
"INSERT INTO packages VALUES (?, ?, ?, ?, ?)",
|
||||
"SELECT * FROM packages WHERE name = '?'",
|
||||
"DELETE from packages WHERE name = '?'",
|
||||
"SELECT * FROM packages",
|
||||
};
|
||||
|
||||
lm_database_t *lm_database_new(char *path){
|
||||
@ -50,6 +51,9 @@ lm_database_t *lm_database_new(char *path){
|
||||
}
|
||||
|
||||
void lm_database_free(lm_database_t *db){
|
||||
if(NULL != db->st)
|
||||
sqlite3_finalize(db->st);
|
||||
|
||||
sqlite3_close(db->sql);
|
||||
free(db->dir);
|
||||
|
||||
|
@ -15,27 +15,26 @@ bool lm_database_add(lm_database_t *db, lm_pkg_t *pkg){
|
||||
}
|
||||
|
||||
char depends[lm_package_depend_strlen(pkg)];
|
||||
sqlite3_stmt *st = NULL;
|
||||
bool ret = false;
|
||||
|
||||
if(sqlite3_prepare(db->sql, queries[QUERY_INSERT_PACKAGE], strlen(queries[QUERY_INSERT_PACKAGE]), &st, NULL) != SQLITE_OK){
|
||||
if(sqlite3_prepare(db->sql, queries[QUERY_INSERT_PACKAGE], strlen(queries[QUERY_INSERT_PACKAGE]), &db->st, NULL) != SQLITE_OK){
|
||||
pdebug(__func__, "failed to prepare statement for inserting %s: %s", pkg->name, sqlite3_errmsg(db->sql));
|
||||
lm_error_set(LM_ERR_DbSqlPrepareFail);
|
||||
goto end;
|
||||
}
|
||||
|
||||
sqlite3_bind_text(st, 1, pkg->name, strlen(pkg->name), SQLITE_STATIC);
|
||||
sqlite3_bind_text(st, 2, pkg->desc, strlen(pkg->desc), SQLITE_STATIC);
|
||||
sqlite3_bind_text(st, 3, pkg->version, strlen(pkg->version), SQLITE_STATIC);
|
||||
sqlite3_bind_int64(st, 4, pkg->size);
|
||||
sqlite3_bind_text(db->st, 1, pkg->name, strlen(pkg->name), SQLITE_STATIC);
|
||||
sqlite3_bind_text(db->st, 2, pkg->desc, strlen(pkg->desc), SQLITE_STATIC);
|
||||
sqlite3_bind_text(db->st, 3, pkg->version, strlen(pkg->version), SQLITE_STATIC);
|
||||
sqlite3_bind_int64(db->st, 4, pkg->size);
|
||||
|
||||
if(!lm_package_depend_tostr(pkg, depends)){
|
||||
pdebug(__func__, "failed to convert depends to string for inserting %s: %s", pkg->name, lm_strerror());
|
||||
goto end;
|
||||
}
|
||||
sqlite3_bind_text(st, 5, depends, strlen(depends), SQLITE_STATIC);
|
||||
sqlite3_bind_text(db->st, 5, depends, strlen(depends), SQLITE_STATIC);
|
||||
|
||||
if(sqlite3_step(st) != SQLITE_DONE){
|
||||
if(sqlite3_step(db->st) != SQLITE_DONE){
|
||||
pdebug(__func__, "failed to execute insert statement for inserting %s: %s", pkg->name, sqlite3_errmsg(db->sql));
|
||||
lm_error_set(LM_ERR_DbSqlInsertFail);
|
||||
goto end;
|
||||
@ -43,8 +42,10 @@ bool lm_database_add(lm_database_t *db, lm_pkg_t *pkg){
|
||||
|
||||
ret = true;
|
||||
end:
|
||||
if(NULL != st)
|
||||
sqlite3_finalize(st);
|
||||
if(NULL != db->st){
|
||||
sqlite3_finalize(db->st);
|
||||
db->st = NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -54,18 +55,17 @@ bool lm_database_find(lm_database_t *db, lm_pkg_t *pkg, char *name){
|
||||
return false;
|
||||
}
|
||||
|
||||
sqlite3_stmt *st;
|
||||
bool ret = false;
|
||||
|
||||
if(sqlite3_prepare(db->sql, queries[QUERY_SELECT_PACKAGE], strlen(queries[QUERY_SELECT_PACKAGE]), &st, NULL) != SQLITE_OK){
|
||||
if(sqlite3_prepare(db->sql, queries[QUERY_SELECT_PACKAGE], strlen(queries[QUERY_SELECT_PACKAGE]), &db->st, NULL) != SQLITE_OK){
|
||||
pdebug(__func__, "failed to prepare statement for finding %s: %s", name, sqlite3_errmsg(db->sql));
|
||||
lm_error_set(LM_ERR_DbSqlPrepareFail);
|
||||
goto end;
|
||||
}
|
||||
|
||||
sqlite3_bind_text(st, 1, name, strlen(name), SQLITE_STATIC);
|
||||
sqlite3_bind_text(db->st, 1, name, strlen(name), SQLITE_STATIC);
|
||||
|
||||
if(sqlite3_step(st) != SQLITE_ROW){
|
||||
if(sqlite3_step(db->st) != SQLITE_ROW){
|
||||
pdebug(__func__, "got no rows for %s", name);
|
||||
lm_error_set(LM_ERR_DbSqlNotFound);
|
||||
goto end;
|
||||
@ -80,12 +80,12 @@ bool lm_database_find(lm_database_t *db, lm_pkg_t *pkg, char *name){
|
||||
// we are initing it just in case the caller didn't
|
||||
lm_package_init(pkg);
|
||||
|
||||
pkg->name = strdup((char*)sqlite3_column_text(st, 0));
|
||||
pkg->desc = strdup((char*)sqlite3_column_text(st, 1));
|
||||
pkg->version = strdup((char*)sqlite3_column_text(st, 2));
|
||||
pkg->size = sqlite3_column_int64(st, 3);
|
||||
pkg->name = strdup((char*)sqlite3_column_text(db->st, 0));
|
||||
pkg->desc = strdup((char*)sqlite3_column_text(db->st, 1));
|
||||
pkg->version = strdup((char*)sqlite3_column_text(db->st, 2));
|
||||
pkg->size = sqlite3_column_int64(db->st, 3);
|
||||
|
||||
char *depends = (char*)sqlite3_column_text(st, 3);
|
||||
char *depends = (char*)sqlite3_column_text(db->st, 3);
|
||||
if(!lm_package_depend_fromstr(pkg, depends)){
|
||||
pdebug(__func__, "failed to load depends for finding %s: %s", pkg->name, lm_strerror());
|
||||
// error is set by the function
|
||||
@ -94,8 +94,10 @@ bool lm_database_find(lm_database_t *db, lm_pkg_t *pkg, char *name){
|
||||
|
||||
ret = true;
|
||||
end:
|
||||
if(NULL != st)
|
||||
sqlite3_finalize(st);
|
||||
if(NULL != db->st){
|
||||
sqlite3_finalize(db->st);
|
||||
db->st = NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -105,18 +107,17 @@ bool lm_database_del(lm_database_t *db, lm_pkg_t *pkg){
|
||||
return false;
|
||||
}
|
||||
|
||||
sqlite3_stmt *st;
|
||||
bool ret = false;
|
||||
|
||||
if(sqlite3_prepare(db->sql, queries[QUERY_DELETE_PACKAGE], strlen(queries[QUERY_DELETE_PACKAGE]), &st, NULL) != SQLITE_OK){
|
||||
if(sqlite3_prepare(db->sql, queries[QUERY_DELETE_PACKAGE], strlen(queries[QUERY_DELETE_PACKAGE]), &db->st, NULL) != SQLITE_OK){
|
||||
pdebug(__func__, "failed to prepare statement for deleting %s: %s", pkg->name, sqlite3_errmsg(db->sql));
|
||||
lm_error_set(LM_ERR_DbSqlPrepareFail);
|
||||
goto end;
|
||||
}
|
||||
|
||||
sqlite3_bind_text(st, 1, pkg->name, strlen(pkg->name), SQLITE_STATIC);
|
||||
sqlite3_bind_text(db->st, 1, pkg->name, strlen(pkg->name), SQLITE_STATIC);
|
||||
|
||||
if(sqlite3_step(st) != SQLITE_DONE){
|
||||
if(sqlite3_step(db->st) != SQLITE_DONE){
|
||||
pdebug(__func__, "failed to execute delete statement for deleting %s: %s", pkg->name, sqlite3_errmsg(db->sql));
|
||||
lm_error_set(LM_ERR_DbSqlInsertFail);
|
||||
goto end;
|
||||
@ -124,7 +125,50 @@ bool lm_database_del(lm_database_t *db, lm_pkg_t *pkg){
|
||||
|
||||
ret = true;
|
||||
end:
|
||||
if(NULL != st)
|
||||
sqlite3_finalize(st);
|
||||
if(NULL != db->st){
|
||||
sqlite3_finalize(db->st);
|
||||
db->st = NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool lm_database_next(lm_database_t *db, lm_pkg_t *pkg){
|
||||
if(NULL == db || NULL == pkg){
|
||||
lm_error_set(LM_ERR_ArgNULL);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(NULL == db->st){
|
||||
if(sqlite3_prepare(db->sql, queries[QUERY_ALL_PACKAGE], strlen(queries[QUERY_ALL_PACKAGE]), &db->st, NULL) != SQLITE_OK){
|
||||
pdebug(__func__, "failed to prepare statement for selecting all: %s", sqlite3_errmsg(db->sql));
|
||||
lm_error_set(LM_ERR_DbSqlPrepareFail);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
lm_package_free(pkg);
|
||||
|
||||
if(sqlite3_step(db->st) != SQLITE_ROW){
|
||||
sqlite3_finalize(db->st);
|
||||
db->st = NULL;
|
||||
return false;
|
||||
}
|
||||
|
||||
lm_package_init(pkg);
|
||||
|
||||
pkg->name = strdup((char*)sqlite3_column_text(db->st, 0));
|
||||
pkg->desc = strdup((char*)sqlite3_column_text(db->st, 1));
|
||||
pkg->version = strdup((char*)sqlite3_column_text(db->st, 2));
|
||||
pkg->size = sqlite3_column_int64(db->st, 3);
|
||||
|
||||
char *depends = (char*)sqlite3_column_text(db->st, 3);
|
||||
if(!lm_package_depend_fromstr(pkg, depends)){
|
||||
pdebug(__func__, "failed to load depends for finding %s: %s", pkg->name, lm_strerror());
|
||||
sqlite3_finalize(db->st);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user