update: add version support to database find, better depend checking for resolve

This commit is contained in:
ngn
2024-07-08 12:49:22 +03:00
parent cb193d0f18
commit 216ca5c9dd
12 changed files with 264 additions and 169 deletions

View File

@ -12,17 +12,20 @@ char *queries[] = {
// QUERY_CREATE_PACKAGE_TABLE
"CREATE TABLE IF NOT EXISTS packages (" \
" name TEXT PRIMARY KEY NOT NULL," \
" desc TEXT NOT NULL," \
" version TEXT NOT NULL," \
" desc TEXT NOT NULL," \
" size INT NOT NULL," \
" depends TEXT NOT NULL);",
// QUERY_INSERT_PACKAGE_SINGLE
"INSERT INTO packages VALUES (?, ?, ?, ?, ?)",
// QUERY_SELECT_PACKAGE_SINGLE
// QUERY_SELECT_PACKAGE_SINGLE_1
"SELECT * FROM packages WHERE name = ?",
// QUERY_SELECT_PACKAGE_SINGLE_2
"SELECT * FROM packages WHERE name = ? AND version = ?",
// QUERY_DELETE_PACKAGE_SINGLE
"DELETE FROM packages WHERE name = ?",

View File

@ -50,21 +50,29 @@ end:
return ret;
}
bool lm_database_package_find(lm_database_t *db, lm_pkg_t *pkg, char *name){
bool lm_database_package_find(lm_database_t *db, lm_pkg_t *pkg, char *name, char *version){
if(NULL == db || NULL == name){
lm_error_set(LM_ERR_ArgNULL);
return false;
}
bool ret = false;
char *query = NULL;
if(sqlite3_prepare(db->packages_db, queries[QUERY_SELECT_PACKAGE_SINGLE], strlen(queries[QUERY_SELECT_PACKAGE_SINGLE]), &db->packages_st, NULL) != SQLITE_OK){
if(NULL == version)
query = queries[QUERY_SELECT_PACKAGE_SINGLE_1];
else
query = queries[QUERY_SELECT_PACKAGE_SINGLE_2];
if(sqlite3_prepare(db->packages_db, query, strlen(query), &db->packages_st, NULL) != SQLITE_OK){
pdebug(__func__, "failed to prepare statement for finding %s: %s", name, sqlite3_errmsg(db->packages_db));
lm_error_set(LM_ERR_DbSqlPrepareFail);
goto end;
}
sqlite3_bind_text(db->packages_st, PACKAGES_COLUMN_NAME, name, strlen(name), SQLITE_STATIC);
if(NULL != version)
sqlite3_bind_text(db->packages_st, PACKAGES_COLUMN_VERSION, version, strlen(version), SQLITE_STATIC);
if(sqlite3_step(db->packages_st) != SQLITE_ROW){
pdebug(__func__, "got no rows for %s", name);