| Index: gears/base/common/database2_versions_table.cc |
| =================================================================== |
| --- gears/base/common/database2_versions_table.cc (revision 0) |
| +++ gears/base/common/database2_versions_table.cc (revision 0) |
| @@ -0,0 +1,132 @@ |
| +// Copyright 2008, Google Inc. |
| +// |
| +// Redistribution and use in source and binary forms, with or without |
| +// modification, are permitted provided that the following conditions are met: |
| +// |
| +// 1. Redistributions of source code must retain the above copyright notice, |
| +// this list of conditions and the following disclaimer. |
| +// 2. Redistributions in binary form must reproduce the above copyright notice, |
| +// this list of conditions and the following disclaimer in the documentation |
| +// and/or other materials provided with the distribution. |
| +// 3. Neither the name of Google Inc. nor the names of its contributors may be |
| +// used to endorse or promote products derived from this software without |
| +// specific prior written permission. |
| +// |
| +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED |
| +// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
| +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO |
| +// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
| +// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
| +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
| +// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
| +// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| + |
| +#include "gears/base/common/database2_versions_table.h" |
| + |
| +bool Database2VersionsTable::GetVersion(const std::string16 &origin, |
| + const std::string16 &name, |
| + std::string16 *version, |
| + bool *found) { |
| + assert(db_); |
| + |
| + const char16 *sql = STRING16( |
| + L"SELECT Version FROM DatabaseVersions " |
| + L"WHERE Origin = ? AND Name = ?"); |
| + |
| + SQLStatement statement; |
| + if (SQLITE_OK != statement.prepare16(db_, sql)) { |
| + LOG(("Database2VersionsTable::GetVersion unable to prepare: %d\n", |
| + db_->GetErrorCode())); |
| + return false; |
| + } |
| + |
| + if (SQLITE_OK != statement.bind_text16(0, origin.c_str())) { |
| + LOG(("Database2VersionsTable::GetVersion unable to bind origin: %d\n", |
| + db_->GetErrorCode())); |
| + return false; |
| + } |
| + |
| + if (SQLITE_OK != statement.bind_text16(1, name.c_str())) { |
| + LOG(("Database2VersionsTable::GetVersion unable to bind name: %d\n", |
| + db_->GetErrorCode())); |
| + return false; |
| + } |
| + |
| + int rc = statement.step(); |
| + if (SQLITE_DONE == rc) { |
| + *found = false; |
| + return true; |
| + } |
| + |
| + if (SQLITE_ROW != rc) { |
| + LOG(("Database2VersionsTable::GetVersion unable to step: %d\n", |
| + db_->GetErrorCode())); |
| + return false; |
| + } |
| + |
| + *version = statement.column_text16_safe(0); |
| + *found = true; |
| + return true; |
| +} |
| + |
| +bool Database2VersionsTable::SetVersion(const std::string16 &origin, |
| + const std::string16 &name, |
| + const std::string16 &version) { |
| + assert(db_); |
| + |
| + const char16 *sql = STRING16( |
| + L"REPLACE INTO DatabaseVersions(Origin, Name, Version) " |
| + L"VALUES(?,?,?) "); |
| + |
| + SQLStatement statement; |
| + if (SQLITE_OK != statement.prepare16(db_, sql)) { |
| + LOG(("Database2VersionsTable::SetVersion unable to prepare: %d\n", |
| + db_->GetErrorCode())); |
| + return false; |
| + } |
| + |
| + if (SQLITE_OK != statement.bind_text16(0, origin.c_str())) { |
| + LOG(("Database2VersionsTable::SetVersion unable to bind origin: %d\n", |
| + db_->GetErrorCode())); |
| + return false; |
| + } |
| + |
| + if (SQLITE_OK != statement.bind_text16(1, name.c_str())) { |
| + LOG(("Database2VersionsTable::SetVersion unable to bind name: %d\n", |
| + db_->GetErrorCode())); |
| + return false; |
| + } |
| + |
| + if (SQLITE_OK != statement.bind_text16(2, version.c_str())) { |
| + LOG(("Database2VersionsTable::SetVersion unable to bind version: %d\n", |
| + db_->GetErrorCode())); |
| + return false; |
| + } |
| + |
| + if (SQLITE_DONE != statement.step()) { |
| + LOG(("Database2VersionsTable::GetDatabaseVersion unable to step: %d\n", |
| + db_->GetErrorCode())); |
| + return false; |
| + } |
| + |
| + return true; |
| +} |
| + |
| +bool Database2VersionsTable::MaybeCreateTableLatestVersion() { |
|
Aaron
2008/05/19 15:33:50
Let's just call this CreateTableVersion8() and not
Dimitri
2008/05/20 03:07:08
On 2008/05/19 15:33:50, Aaron wrote:
> Let's just
|
| + const char *sql = "CREATE TABLE IF NOT EXISTS DatabaseVersions (" |
| + " DatabaseID INTEGER PRIMARY KEY AUTOINCREMENT," |
| + " Origin TEXT NOT NULL," |
| + " Name TEXT NOT NULL," |
| + " Version TEXT NOT NULL," |
| + " UNIQUE (Origin, Name)" |
| + ")"; |
| + if (SQLITE_OK != db_->Execute(sql)) { |
| + LOG(("Database2VersionsTabel::MaybeCreateTableLatestVersion create" |
| + " unable to execute: %d", db_->GetErrorCode())); |
| + return false; |
| + } |
| + return true; |
| +} |
| + |