15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef COMPONENTS_WEBDATA_COMMON_WEB_DATABASE_H_ 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define COMPONENTS_WEBDATA_COMMON_WEB_DATABASE_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <map> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/webdata/common/web_database_table.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/webdata/common/webdata_export.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sql/connection.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sql/init_status.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sql/meta_table.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FilePath; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class manages a SQLite database that stores various web page meta data. 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WEBDATA_EXPORT WebDatabase { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum State { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) COMMIT_NOT_NEEDED, 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) COMMIT_NEEDED 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Exposed publicly so the keyword table can access it. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const int kCurrentVersionNumber; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebDatabase(); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~WebDatabase(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds a database table. Ownership remains with the caller, which 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // must ensure that the lifetime of |table| exceeds this object's 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // lifetime. Must only be called before Init. 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddTable(WebDatabaseTable* table); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Retrieves a table based on its |key|. 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebDatabaseTable* GetTable(WebDatabaseTable::TypeKey key); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the database given a name. The name defines where the SQLite 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // file is. If this returns an error code, no other method should be called. 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Before calling this method, you must call AddTable for any 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // WebDatabaseTable objects that are supposed to participate in 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // managing the database. 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sql::InitStatus Init(const base::FilePath& db_name); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Transactions management 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void BeginTransaction(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CommitTransaction(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Exposed for testing only. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection* GetSQLConnection(); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used by |Init()| to migration database schema from older versions to 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // current version. 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sql::InitStatus MigrateOldVersionsAsNeeded(); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Connection db_; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::MetaTable meta_table_; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Map of all the different tables that have been added to this 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // object. Non-owning. 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef std::map<WebDatabaseTable::TypeKey, WebDatabaseTable*> TableMap; 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TableMap tables_; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebDatabase); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // COMPONENTS_WEBDATA_COMMON_WEB_DATABASE_H_ 74