blob: e9065ef25e957e0d9eab640d57125106bece483e [file] [log] [blame]
// Copyright (c) 2011 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/quota_table.h"
#include "base/logging.h"
#include "base/utf_string_conversions.h"
#include "sql/statement.h"
namespace webkit_database {
bool QuotaTable::Init() {
// 'Quota' schema:
// origin The origin.
// quota The quota for this origin.
return db_->DoesTableExist("Quota") ||
db_->Execute(
"CREATE TABLE Quota ("
"origin TEXT NOT NULL PRIMARY KEY, "
"quota INTEGER NOT NULL)");
}
int64 QuotaTable::GetOriginQuota(const string16& origin_identifier) {
sql::Statement statement(db_->GetCachedStatement(
SQL_FROM_HERE, "SELECT quota FROM Quota WHERE origin = ?"));
if (statement.is_valid() &&
statement.BindString(0, UTF16ToUTF8(origin_identifier)) &&
statement.Step()) {
return statement.ColumnInt64(0);
}
return -1;
}
bool QuotaTable::SetOriginQuota(const string16& origin_identifier,
int64 quota) {
DCHECK(quota >= 0);
// Insert or update the quota for this origin.
sql::Statement replace_statement(db_->GetCachedStatement(
SQL_FROM_HERE, "REPLACE INTO Quota VALUES (?, ?)"));
if (replace_statement.is_valid() &&
replace_statement.BindString(0, UTF16ToUTF8(origin_identifier)) &&
replace_statement.BindInt64(1, quota)) {
return replace_statement.Run();
}
return false;
}
bool QuotaTable::ClearOriginQuota(const string16& origin_identifier) {
sql::Statement statement(db_->GetCachedStatement(
SQL_FROM_HERE, "DELETE FROM Quota WHERE origin = ?"));
if (statement.is_valid() &&
statement.BindString(0, UTF16ToUTF8(origin_identifier))) {
return (statement.Run() && db_->GetLastChangeCount());
}
return false;
}
} // namespace webkit_database