| @@ -1,4 +1,4 @@ | |||
| #include "./repodb.hpp" | |||
| #include "./catalog.hpp" | |||
| #include <neo/sqlite3/exec.hpp> | |||
| #include <neo/sqlite3/iter_tuples.hpp> | |||
| @@ -88,7 +88,7 @@ void ensure_migrated(sqlite3::database& db) { | |||
| } // namespace | |||
| repo_database repo_database::open(const std::string& db_path) { | |||
| catalog catalog::open(const std::string& db_path) { | |||
| auto db = sqlite3::database::open(db_path); | |||
| try { | |||
| ensure_migrated(db); | |||
| @@ -99,13 +99,13 @@ repo_database repo_database::open(const std::string& db_path) { | |||
| e.what()); | |||
| throw; | |||
| } | |||
| return repo_database(std::move(db)); | |||
| return catalog(std::move(db)); | |||
| } | |||
| repo_database::repo_database(sqlite3::database db) | |||
| catalog::catalog(sqlite3::database db) | |||
| : _db(std::move(db)) {} | |||
| void repo_database::_store_pkg(const package_info& pkg, const git_remote_listing& git) { | |||
| void catalog::_store_pkg(const package_info& pkg, const git_remote_listing& git) { | |||
| auto lm_usage = git.auto_lib.value_or(lm::usage{}); | |||
| sqlite3::exec( // | |||
| _stmt_cache, | |||
| @@ -135,7 +135,7 @@ void repo_database::_store_pkg(const package_info& pkg, const git_remote_listing | |||
| lm_usage.namespace_)); | |||
| } | |||
| void repo_database::store(const package_info& pkg) { | |||
| void catalog::store(const package_info& pkg) { | |||
| sqlite3::transaction_guard tr{_db}; | |||
| std::visit([&](auto&& remote) { _store_pkg(pkg, remote); }, pkg.remote); | |||
| @@ -164,7 +164,7 @@ void repo_database::store(const package_info& pkg) { | |||
| } | |||
| } | |||
| std::vector<package_id> repo_database::by_name(std::string_view sv) const noexcept { | |||
| std::vector<package_id> catalog::by_name(std::string_view sv) const noexcept { | |||
| return sqlite3::exec_iter<std::string, std::string>( // | |||
| _stmt_cache, | |||
| R"( | |||
| @@ -180,7 +180,7 @@ std::vector<package_id> repo_database::by_name(std::string_view sv) const noexce | |||
| | ranges::to_vector; | |||
| } | |||
| std::vector<dependency> repo_database::dependencies_of(const package_id& pkg) const noexcept { | |||
| std::vector<dependency> catalog::dependencies_of(const package_id& pkg) const noexcept { | |||
| return sqlite3::exec_iter<std::string, | |||
| std::string>( // | |||
| _stmt_cache, | |||
| @@ -213,7 +213,7 @@ void check_json(bool b, std::string_view what) { | |||
| } // namespace | |||
| void repo_database::import_json_str(std::string_view content) { | |||
| void catalog::import_json_str(std::string_view content) { | |||
| using nlohmann::json; | |||
| auto root = json::parse(content); | |||
| @@ -21,21 +21,21 @@ struct package_info { | |||
| std::variant<git_remote_listing> remote; | |||
| }; | |||
| class repo_database { | |||
| class catalog { | |||
| neo::sqlite3::database _db; | |||
| mutable neo::sqlite3::statement_cache _stmt_cache{_db}; | |||
| explicit repo_database(neo::sqlite3::database db); | |||
| repo_database(const repo_database&) = delete; | |||
| explicit catalog(neo::sqlite3::database db); | |||
| catalog(const catalog&) = delete; | |||
| void _store_pkg(const package_info&, const git_remote_listing&); | |||
| public: | |||
| repo_database(repo_database&&) = default; | |||
| repo_database& operator=(repo_database&&) = default; | |||
| catalog(catalog&&) = default; | |||
| catalog& operator=(catalog&&) = default; | |||
| static repo_database open(const std::string& db_path); | |||
| static repo_database open(path_ref db_path) { return open(db_path.string()); } | |||
| static catalog open(const std::string& db_path); | |||
| static catalog open(path_ref db_path) { return open(db_path.string()); } | |||
| void store(const package_info& info); | |||
| @@ -1,4 +1,4 @@ | |||
| #include <dds/repo/repodb.hpp> | |||
| #include <dds/repo/catalog.hpp> | |||
| #include <catch2/catch.hpp> | |||
| @@ -6,15 +6,15 @@ using namespace std::literals; | |||
| TEST_CASE("Create a simple database") { | |||
| // Just create and run migrations on an in-memory database | |||
| auto repo = dds::repo_database::open(":memory:"s); | |||
| auto repo = dds::catalog::open(":memory:"s); | |||
| } | |||
| class repo_test_case { | |||
| class catalog_test_case { | |||
| public: | |||
| dds::repo_database db = dds::repo_database::open(":memory:"s); | |||
| dds::catalog db = dds::catalog::open(":memory:"s); | |||
| }; | |||
| TEST_CASE_METHOD(repo_test_case, "Store a simple package") { | |||
| TEST_CASE_METHOD(catalog_test_case, "Store a simple package") { | |||
| db.store(dds::package_info{ | |||
| dds::package_id("foo", semver::version::parse("1.2.3")), | |||
| {}, | |||
| @@ -30,7 +30,7 @@ TEST_CASE_METHOD(repo_test_case, "Store a simple package") { | |||
| REQUIRE(pkgs.size() == 1); | |||
| } | |||
| TEST_CASE_METHOD(repo_test_case, "Package requirements") { | |||
| TEST_CASE_METHOD(catalog_test_case, "Package requirements") { | |||
| db.store(dds::package_info{ | |||
| dds::package_id{"foo", semver::version::parse("1.2.3")}, | |||
| { | |||
| @@ -48,7 +48,7 @@ TEST_CASE_METHOD(repo_test_case, "Package requirements") { | |||
| CHECK(deps[1].name == "baz"); | |||
| } | |||
| TEST_CASE_METHOD(repo_test_case, "Parse JSON repo") { | |||
| TEST_CASE_METHOD(catalog_test_case, "Parse JSON repo") { | |||
| db.import_json_str(R"({ | |||
| "version": 1, | |||
| "packages": { | |||