Index: gears/base/common/database2_metadata.cc =================================================================== --- gears/base/common/database2_metadata.cc (revision 0) +++ gears/base/common/database2_metadata.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_metadata.h" + +bool Database2Metadata::GetVersion(const std::string16 &origin, + const std::string16 &name, + std::string16 *version, + bool *found) { + assert(db_); + + const char16 *sql = STRING16( + L"SELECT Version FROM Database2Metadata " + L"WHERE Origin = ? AND Name = ?"); + + SQLStatement statement; + if (SQLITE_OK != statement.prepare16(db_, sql)) { + LOG(("Database2Metadata::GetVersion unable to prepare: %d\n", + db_->GetErrorCode())); + return false; + } + + if (SQLITE_OK != statement.bind_text16(0, origin.c_str())) { + LOG(("Database2Metadata::GetVersion unable to bind origin: %d\n", + db_->GetErrorCode())); + return false; + } + + if (SQLITE_OK != statement.bind_text16(1, name.c_str())) { + LOG(("Database2Metadata::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(("Database2Metadata::GetVersion unable to step: %d\n", + db_->GetErrorCode())); + return false; + } + + *version = statement.column_text16_safe(0); + *found = true; + return true; +} + +bool Database2Metadata::SetVersion(const std::string16 &origin, + const std::string16 &name, + const std::string16 &version) { + assert(db_); + + const char16 *sql = STRING16( + L"REPLACE INTO Database2Metadata(Origin, Name, Version) " + L"VALUES(?,?,?) "); + + SQLStatement statement; + if (SQLITE_OK != statement.prepare16(db_, sql)) { + LOG(("Database2Metadata::SetVersion unable to prepare: %d\n", + db_->GetErrorCode())); + return false; + } + + if (SQLITE_OK != statement.bind_text16(0, origin.c_str())) { + LOG(("Database2Metadata::SetVersion unable to bind origin: %d\n", + db_->GetErrorCode())); + return false; + } + + if (SQLITE_OK != statement.bind_text16(1, name.c_str())) { + LOG(("Database2Metadata::SetVersion unable to bind name: %d\n", + db_->GetErrorCode())); + return false; + } + + if (SQLITE_OK != statement.bind_text16(2, version.c_str())) { + LOG(("Database2Metadata::SetVersion unable to bind version: %d\n", + db_->GetErrorCode())); + return false; + } + + if (SQLITE_DONE != statement.step()) { + LOG(("Database2Metadata::GetDatabaseVersion unable to step: %d\n", + db_->GetErrorCode())); + return false; + } + + return true; +} + +bool Database2Metadata::CreateTableVersion8() { + const char *sql = "CREATE TABLE Database2Metadata (" + " 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; +} +