1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_POWER_BOOKMARKS_STORAGE_POWER_BOOKMARK_DATABASE_IMPL_H_
#define COMPONENTS_POWER_BOOKMARKS_STORAGE_POWER_BOOKMARK_DATABASE_IMPL_H_
#include "base/files/file_path.h"
#include "base/gtest_prod_util.h"
#include "components/power_bookmarks/common/power.h"
#include "components/power_bookmarks/common/power_overview.h"
#include "components/power_bookmarks/storage/power_bookmark_database.h"
#include "sql/database.h"
#include "sql/meta_table.h"
#include "url/gurl.h"
namespace power_bookmarks {
struct SearchParams;
class PowerBookmarkSyncMetadataDatabase;
constexpr base::FilePath::CharType kDatabaseName[] =
FILE_PATH_LITERAL("PowerBookmarks.db");
// Holds the SQL connection for the main Power Bookmarks tables.
class PowerBookmarkDatabaseImpl : public PowerBookmarkDatabase {
public:
explicit PowerBookmarkDatabaseImpl(const base::FilePath& database_dir);
PowerBookmarkDatabaseImpl(const PowerBookmarkDatabaseImpl&) = delete;
PowerBookmarkDatabaseImpl& operator=(const PowerBookmarkDatabaseImpl&) =
delete;
~PowerBookmarkDatabaseImpl() override;
// PowerBookmarkDatabase implementation
bool Init() override;
bool IsOpen() override;
std::vector<std::unique_ptr<Power>> GetPowersForURL(
const GURL& url,
const sync_pb::PowerBookmarkSpecifics::PowerType& power_type) override;
std::vector<std::unique_ptr<PowerOverview>> GetPowerOverviewsForType(
const sync_pb::PowerBookmarkSpecifics::PowerType& power_type) override;
std::vector<std::unique_ptr<Power>> GetPowersForSearchParams(
const SearchParams& search_params) override;
std::vector<std::unique_ptr<PowerOverview>> GetPowerOverviewsForSearchParams(
const SearchParams& search_params) override;
bool CreatePower(std::unique_ptr<Power> power) override;
std::unique_ptr<Power> UpdatePower(std::unique_ptr<Power> power) override;
bool DeletePower(const base::Uuid& guid) override;
bool DeletePowersForURL(
const GURL& url,
const sync_pb::PowerBookmarkSpecifics::PowerType& power_type,
std::vector<std::string>* deleted_guids = nullptr) override;
std::vector<std::unique_ptr<Power>> GetAllPowers() override;
std::vector<std::unique_ptr<Power>> GetPowersForGUIDs(
const std::vector<std::string>& guids) override;
std::unique_ptr<Power> GetPowerForGUID(const std::string& guid) override;
bool CreateOrMergePowerFromSync(const Power& power) override;
bool DeletePowerFromSync(const std::string& guid) override;
PowerBookmarkSyncMetadataDatabase* GetSyncMetadataDatabase() override;
std::unique_ptr<Transaction> BeginTransaction() override;
private:
FRIEND_TEST_ALL_PREFIXES(PowerBookmarkDatabaseImplTest,
InitDatabaseWithErrorCallback);
// Called by the database to report errors.
void DatabaseErrorCallback(int error, sql::Statement* stmt);
// Creates or migrates to the new schema if needed.
bool InitSchema();
bool CreateSchema();
std::optional<sync_pb::PowerBookmarkSpecifics> DeserializeOrDelete(
std::string_view data,
const base::Uuid& id);
std::vector<std::string> GetGUIDsForURL(
const GURL& url,
const sync_pb::PowerBookmarkSpecifics::PowerType& power_type);
bool CreatePowerInternal(const Power& power);
bool UpdatePowerInternal(const Power& power);
bool DeletePowerInternal(const base::Uuid& guid);
sql::Database db_ GUARDED_BY_CONTEXT(sequence_checker_);
sql::MetaTable meta_table_ GUARDED_BY_CONTEXT(sequence_checker_);
std::unique_ptr<PowerBookmarkSyncMetadataDatabase> sync_db_;
const base::FilePath database_path_;
SEQUENCE_CHECKER(sequence_checker_);
};
} // namespace power_bookmarks
#endif // COMPONENTS_POWER_BOOKMARKS_STORAGE_POWER_BOOKMARK_DATABASE_IMPL_H_
|