update: add version support to database find, better depend checking for resolve
This commit is contained in:
@ -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 = ?",
|
||||
|
||||
|
@ -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);
|
||||
|
Reference in New Issue
Block a user