| Index: chrome/browser/meta_table_helper.cc
|
| ===================================================================
|
| --- chrome/browser/meta_table_helper.cc (revision 19705)
|
| +++ chrome/browser/meta_table_helper.cc (working copy)
|
| @@ -12,6 +12,24 @@
|
| static const char kVersionKey[] = "version";
|
| static const char kCompatibleVersionKey[] = "last_compatible_version";
|
|
|
| +// static
|
| +void MetaTableHelper::PrimeCache(const std::string& db_name, sqlite3* db) {
|
| + // A statement must be open for the preload command to work. If the meta
|
| + // table doesn't exist, it probably means this is a new database and there
|
| + // is nothing to preload (so it's OK we do nothing).
|
| + SQLStatement dummy;
|
| + if (!DoesSqliteTableExist(db, db_name.c_str(), "meta"))
|
| + return;
|
| + std::string sql("SELECT * from ");
|
| + appendMetaTableName(db_name, &sql);
|
| + if (dummy.prepare(db, sql.c_str()) != SQLITE_OK)
|
| + return;
|
| + if (dummy.step() != SQLITE_ROW)
|
| + return;
|
| +
|
| + sqlite3Preload(db);
|
| +}
|
| +
|
| MetaTableHelper::MetaTableHelper() : db_(NULL) {
|
| }
|
|
|
| @@ -28,13 +46,9 @@
|
| if (!DoesSqliteTableExist(db_, db_name.c_str(), "meta")) {
|
| // Build the sql.
|
| std::string sql("CREATE TABLE ");
|
| - if (!db_name.empty()) {
|
| - // Want a table name of the form db_name.meta
|
| - sql.append(db_name);
|
| - sql.push_back('.');
|
| - }
|
| - sql.append("meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY,"
|
| - "value LONGVARCHAR)");
|
| + appendMetaTableName(db_name, &sql);
|
| + sql.append("(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY,"
|
| + "value LONGVARCHAR)");
|
|
|
| if (sqlite3_exec(db_, sql.c_str(), NULL, NULL, NULL) != SQLITE_OK)
|
| return false;
|
| @@ -130,15 +144,22 @@
|
| return version;
|
| }
|
|
|
| +// static
|
| +void MetaTableHelper::appendMetaTableName(const std::string& db_name,
|
| + std::string* sql) {
|
| + if (!db_name.empty()) {
|
| + sql->append(db_name);
|
| + sql->push_back('.');
|
| + }
|
| + sql->append("meta");
|
| +}
|
| +
|
| bool MetaTableHelper::PrepareSetStatement(SQLStatement* statement,
|
| const std::string& key) {
|
| DCHECK(db_ && statement);
|
| std::string sql("INSERT OR REPLACE INTO ");
|
| - if (db_name_.size() > 0) {
|
| - sql.append(db_name_);
|
| - sql.push_back('.');
|
| - }
|
| - sql.append("meta(key,value) VALUES(?,?)");
|
| + appendMetaTableName(db_name_, &sql);
|
| + sql.append("(key,value) VALUES(?,?)");
|
| if (statement->prepare(db_, sql.c_str()) != SQLITE_OK) {
|
| NOTREACHED() << sqlite3_errmsg(db_);
|
| return false;
|
| @@ -151,11 +172,8 @@
|
| const std::string& key) {
|
| DCHECK(db_ && statement);
|
| std::string sql("SELECT value FROM ");
|
| - if (db_name_.size() > 0) {
|
| - sql.append(db_name_);
|
| - sql.push_back('.');
|
| - }
|
| - sql.append("meta WHERE key = ?");
|
| + appendMetaTableName(db_name_, &sql);
|
| + sql.append(" WHERE key = ?");
|
| if (statement->prepare(db_, sql.c_str()) != SQLITE_OK) {
|
| NOTREACHED() << sqlite3_errmsg(db_);
|
| return false;
|
|
|