// Copyright 2016 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_AFFILIATIONS_CORE_BROWSER_SQL_TABLE_BUILDER_H_ #define COMPONENTS_AFFILIATIONS_CORE_BROWSER_SQL_TABLE_BUILDER_H_ #include <limits> #include <string> #include <string_view> #include <vector> #include "base/functional/callback_helpers.h" namespace sql { class Database; } namespace affiliations { // Use this class to represent the versioned evolution of a SQLite table // structure and generate creating and migrating statements for it. // // Usage example: // // SQLTableBuilder builder("logins"); // // // First describe a couple of versions: // builder.AddColumnToPrimaryKey("id", "INTEGER"); // builder.AddColumn("name", "VARCHAR"); // builder.AddColumn("icon", "VARCHAR"); // builder.AddColumn("password", "VARCHAR NOT NULL"); // unsigned version = builder.SealVersion(); // Version 0 is sealed. // DCHECK_EQ(0u, version); // builder.RenameColumn("icon", "avatar"); // version = builder.SealVersion(); // Version 1 is sealed. // DCHECK_EQ(1u, version); // // // Now, assuming that |db| has a table "logins" in a state corresponding // // version 0, this will migrate it to the latest version: // sql::Database* db = ...; // builder.MigrateFrom(0, db); // // // And assuming |db| has no table called "logins", this will create one // // in a state corresponding the latest sealed version: // builder.CreateTable(db); class SQLTableBuilder { … }; } // namespace affiliations #endif // COMPONENTS_AFFILIATIONS_CORE_BROWSER_SQL_TABLE_BUILDER_H_