| Index: webkit/database/databases_table.cc
|
| ===================================================================
|
| --- webkit/database/databases_table.cc (revision 0)
|
| +++ webkit/database/databases_table.cc (revision 0)
|
| @@ -0,0 +1,122 @@
|
| +// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "webkit/database/databases_table.h"
|
| +
|
| +#include "app/sql/connection.h"
|
| +#include "app/sql/statement.h"
|
| +#include "base/string_util.h"
|
| +
|
| +namespace webkit_database {
|
| +
|
| +bool DatabasesTable::Init() {
|
| + // 'Databases' schema:
|
| + // id A unique ID assigned to each database
|
| + // origin The originto which the database belongs. This is a
|
| + // string that can be used as part of a file name
|
| + // (http_webkit.org_0, for example).
|
| + // name The database name.
|
| + // description A short description of the database.
|
| + // estimated_size The estimated size of the database.
|
| + return db_->DoesTableExist("Databases") ||
|
| + (db_->Execute(
|
| + "CREATE TABLE Databases ("
|
| + "id INTEGER PRIMARY KEY AUTOINCREMENT, "
|
| + "origin TEXT NOT NULL, "
|
| + "name TEXT NOT NULL, "
|
| + "description TEXT NOT NULL, "
|
| + "estimated_size INTEGER NOT NULL)") &&
|
| + db_->Execute(
|
| + "CREATE INDEX origin_index ON Databases (origin)") &&
|
| + db_->Execute(
|
| + "CREATE UNIQUE INDEX unique_index ON Databases (origin, name)"));
|
| +}
|
| +
|
| +bool DatabasesTable::GetDatabaseDetails(const string16& origin_identifier,
|
| + const string16& database_name,
|
| + DatabaseDetails* details) {
|
| + DCHECK(details);
|
| + sql::Statement select_statement(db_->GetCachedStatement(
|
| + SQL_FROM_HERE, "SELECT description, estimated_size FROM Databases "
|
| + "WHERE origin = ? AND name = ?"));
|
| + if (select_statement.is_valid() &&
|
| + select_statement.BindString(0, UTF16ToUTF8(origin_identifier)) &&
|
| + select_statement.BindString(1, UTF16ToUTF8(database_name)) &&
|
| + select_statement.Step()) {
|
| + details->origin_identifier = origin_identifier;
|
| + details->database_name = database_name;
|
| + details->description = UTF8ToUTF16(select_statement.ColumnString(0));
|
| + details->estimated_size = select_statement.ColumnInt64(1);
|
| + return true;
|
| + }
|
| +
|
| + return false;
|
| +}
|
| +
|
| +bool DatabasesTable::InsertDatabaseDetails(const DatabaseDetails& details) {
|
| + sql::Statement insert_statement(db_->GetCachedStatement(
|
| + SQL_FROM_HERE, "INSERT INTO Databases (origin, name, description, "
|
| + "estimated_size) VALUES (?, ?, ?, ?)"));
|
| + if (insert_statement.is_valid() &&
|
| + insert_statement.BindString(0, UTF16ToUTF8(details.origin_identifier)) &&
|
| + insert_statement.BindString(1, UTF16ToUTF8(details.database_name)) &&
|
| + insert_statement.BindString(2, UTF16ToUTF8(details.description)) &&
|
| + insert_statement.BindInt64(3, details.estimated_size)) {
|
| + return insert_statement.Run();
|
| + }
|
| +
|
| + return false;
|
| +}
|
| +
|
| +bool DatabasesTable::UpdateDatabaseDetails(const DatabaseDetails& details) {
|
| + sql::Statement update_statement(db_->GetCachedStatement(
|
| + SQL_FROM_HERE, "UPDATE Databases SET description = ?, "
|
| + "estimated_size = ? WHERE origin = ? AND name = ?"));
|
| + if (update_statement.is_valid() &&
|
| + update_statement.BindString(0, UTF16ToUTF8(details.description)) &&
|
| + update_statement.BindInt64(1, details.estimated_size) &&
|
| + update_statement.BindString(2, UTF16ToUTF8(details.origin_identifier)) &&
|
| + update_statement.BindString(3, UTF16ToUTF8(details.database_name))) {
|
| + return (update_statement.Run() && db_->GetLastChangeCount());
|
| + }
|
| +
|
| + return false;
|
| +}
|
| +
|
| +bool DatabasesTable::DeleteDatabaseDetails(const string16& origin_identifier,
|
| + const string16& database_name) {
|
| + sql::Statement delete_statement(db_->GetCachedStatement(
|
| + SQL_FROM_HERE, "DELETE FROM Databases WHERE origin = ? AND name = ?"));
|
| + if (delete_statement.is_valid() &&
|
| + delete_statement.BindString(0, UTF16ToUTF8(origin_identifier)) &&
|
| + delete_statement.BindString(1, UTF16ToUTF8(database_name))) {
|
| + return (delete_statement.Run() && db_->GetLastChangeCount());
|
| + }
|
| +
|
| + return false;
|
| +}
|
| +
|
| +bool DatabasesTable::GetAllDatabaseDetailsForOrigin(
|
| + const string16& origin_identifier,
|
| + std::vector<DatabaseDetails>* details_vector) {
|
| + sql::Statement statement(db_->GetCachedStatement(
|
| + SQL_FROM_HERE, "SELECT name, description, estimated_size "
|
| + "FROM Databases WHERE origin = ? ORDER BY origin, name"));
|
| + if (statement.is_valid() &&
|
| + statement.BindString(0, UTF16ToUTF8(origin_identifier))) {
|
| + while (statement.Step()) {
|
| + DatabaseDetails details;
|
| + details.origin_identifier = origin_identifier;
|
| + details.database_name = UTF8ToUTF16(statement.ColumnString(0));
|
| + details.description = UTF8ToUTF16(statement.ColumnString(1));
|
| + details.estimated_size = statement.ColumnInt64(2);
|
| + details_vector->push_back(details);
|
| + }
|
| + return statement.Succeeded();
|
| + }
|
| +
|
| + return false;
|
| +}
|
| +
|
| +} // namespace webkit_database
|
|
|
| Property changes on: webkit\database\databases_table.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|