From: Tomas Mlcoch Date: Tue, 8 Apr 2014 09:05:02 +0000 (+0200) Subject: Weak deps: sqlite X-Git-Tag: upstream/0.10.0~243 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9e7efd17147ce7f9d85f60ffc44693faf8745c97;p=services%2Fcreaterepo_c.git Weak deps: sqlite --- diff --git a/src/sqlite.c b/src/sqlite.c index 0d73e0c..b554c9f 100644 --- a/src/sqlite.c +++ b/src/sqlite.c @@ -42,6 +42,10 @@ struct _DbPrimaryStatements { sqlite3_stmt *conflicts_handle; sqlite3_stmt *obsoletes_handle; sqlite3_stmt *requires_handle; + sqlite3_stmt *suggests_handle; + sqlite3_stmt *enhances_handle; + sqlite3_stmt *recommends_handle; + sqlite3_stmt *supplements_handle; sqlite3_stmt *files_handle; }; @@ -200,7 +204,9 @@ db_create_primary_tables(sqlite3 *db, GError **err) " release TEXT," " pkgKey INTEGER %s)"; - const char *deps[] = { "requires", "provides", "conflicts", "obsoletes", NULL }; + const char *deps[] = { "requires", "provides", "conflicts", "obsoletes", + "suggests", "enhances", "recommends", "supplements", + NULL }; int i; for (i = 0; deps[i]; i++) { @@ -232,6 +238,10 @@ db_create_primary_tables(sqlite3 *db, GError **err) " DELETE FROM provides WHERE pkgKey = old.pkgKey;" " DELETE FROM conflicts WHERE pkgKey = old.pkgKey;" " DELETE FROM obsoletes WHERE pkgKey = old.pkgKey;" + " DELETE FROM suggests WHERE pkgKey = old.pkgKey;" + " DELETE FROM enhances WHERE pkgKey = old.pkgKey;" + " DELETE FROM recommends WHERE pkgKey = old.pkgKey;" + " DELETE FROM supplements WHERE pkgKey = old.pkgKey;" " END;"; rc = sqlite3_exec (db, sql, NULL, NULL, NULL); @@ -411,6 +421,10 @@ db_index_primary_tables (sqlite3 *db, GError **err) "provides", "conflicts", "obsoletes", + "suggests", + "enhances", + "recommends", + "supplements", NULL }; @@ -1067,13 +1081,17 @@ cr_db_prepare_primary_statements(sqlite3 *db, GError **err) assert(!err || *err == NULL); - ret->db = db; - ret->pkg_handle = NULL; - ret->provides_handle = NULL; - ret->conflicts_handle = NULL; - ret->obsoletes_handle = NULL; - ret->requires_handle = NULL; - ret->files_handle = NULL; + ret->db = db; + ret->pkg_handle = NULL; + ret->provides_handle = NULL; + ret->conflicts_handle = NULL; + ret->obsoletes_handle = NULL; + ret->requires_handle = NULL; + ret->suggests_handle = NULL; + ret->enhances_handle = NULL; + ret->recommends_handle = NULL; + ret->supplements_handle = NULL; + ret->files_handle = NULL; ret->pkg_handle = db_package_prepare(db, &tmp_err); if (tmp_err) { @@ -1105,6 +1123,30 @@ cr_db_prepare_primary_statements(sqlite3 *db, GError **err) return ret; } + ret->suggests_handle = db_dependency_prepare(db, "suggests", &tmp_err); + if (tmp_err) { + g_propagate_error(err, tmp_err); + return ret; + } + + ret->enhances_handle = db_dependency_prepare(db, "enhances", &tmp_err); + if (tmp_err) { + g_propagate_error(err, tmp_err); + return ret; + } + + ret->recommends_handle = db_dependency_prepare(db, "recommends", &tmp_err); + if (tmp_err) { + g_propagate_error(err, tmp_err); + return ret; + } + + ret->supplements_handle = db_dependency_prepare(db, "supplements", &tmp_err); + if (tmp_err) { + g_propagate_error(err, tmp_err); + return ret; + } + ret->files_handle = db_file_prepare(db, &tmp_err); if (tmp_err) { g_propagate_error(err, tmp_err); @@ -1131,6 +1173,14 @@ cr_db_destroy_primary_statements(cr_DbPrimaryStatements stmts) sqlite3_finalize(stmts->obsoletes_handle); if (stmts->requires_handle) sqlite3_finalize(stmts->requires_handle); + if (stmts->suggests_handle) + sqlite3_finalize(stmts->suggests_handle); + if (stmts->enhances_handle) + sqlite3_finalize(stmts->enhances_handle); + if (stmts->recommends_handle) + sqlite3_finalize(stmts->recommends_handle); + if (stmts->supplements_handle) + sqlite3_finalize(stmts->supplements_handle); if (stmts->files_handle) sqlite3_finalize(stmts->files_handle); free(stmts); @@ -1205,6 +1255,58 @@ cr_db_add_primary_pkg(cr_DbPrimaryStatements stmts, } } + for (iter = pkg->suggests; iter; iter = iter->next) { + db_dependency_write(stmts->db, + stmts->suggests_handle, + pkg->pkgKey, + (cr_Dependency *) iter->data, + TRUE, + &tmp_err); + if (tmp_err) { + g_propagate_error(err, tmp_err); + return; + } + } + + for (iter = pkg->enhances; iter; iter = iter->next) { + db_dependency_write(stmts->db, + stmts->enhances_handle, + pkg->pkgKey, + (cr_Dependency *) iter->data, + TRUE, + &tmp_err); + if (tmp_err) { + g_propagate_error(err, tmp_err); + return; + } + } + + for (iter = pkg->recommends; iter; iter = iter->next) { + db_dependency_write(stmts->db, + stmts->recommends_handle, + pkg->pkgKey, + (cr_Dependency *) iter->data, + TRUE, + &tmp_err); + if (tmp_err) { + g_propagate_error(err, tmp_err); + return; + } + } + + for (iter = pkg->supplements; iter; iter = iter->next) { + db_dependency_write(stmts->db, + stmts->supplements_handle, + pkg->pkgKey, + (cr_Dependency *) iter->data, + TRUE, + &tmp_err); + if (tmp_err) { + g_propagate_error(err, tmp_err); + return; + } + } + for (iter = pkg->files; iter; iter = iter->next) { db_file_write(stmts->db, stmts->files_handle, pkg->pkgKey, (cr_PackageFile *) iter->data, &tmp_err); diff --git a/tests/python/tests/test_sqlite.py b/tests/python/tests/test_sqlite.py index 95cb4dc..7e5698d 100644 --- a/tests/python/tests/test_sqlite.py +++ b/tests/python/tests/test_sqlite.py @@ -74,7 +74,12 @@ class TestCaseSqlite(unittest.TestCase): (u'requires',), (u'provides',), (u'conflicts',), - (u'obsoletes',)]) + (u'obsoletes',), + (u'suggests',), + (u'enhances',), + (u'recommends',), + (u'supplements',), + ]) # Check indexes self.assertEqual(con.execute("""select name from sqlite_master where type="index";""").fetchall(), [(u'packagename',), @@ -86,7 +91,12 @@ class TestCaseSqlite(unittest.TestCase): (u'pkgprovides',), (u'providesname',), (u'pkgconflicts',), - (u'pkgobsoletes',)]) + (u'pkgobsoletes',), + (u'pkgsuggests',), + (u'pkgenhances',), + (u'pkgrecommends',), + (u'pkgsupplements',), + ]) # Check triggers self.assertEqual(con.execute("""select name from sqlite_master where type="trigger";""").fetchall(), [(u'removals',)])