Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Unified Diff: sql/statement.cc

Issue 8899012: Put debugging assertions into sql::Statement. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Oops, Execute() should stay loose. Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sql/statement.h ('k') | sql/statement_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sql/statement.cc
diff --git a/sql/statement.cc b/sql/statement.cc
index 8f75693d730884270d3f7a4de19b03a568767660..fd73b0f588561f235d77d82529574ae7e16be05d 100644
--- a/sql/statement.cc
+++ b/sql/statement.cc
@@ -35,15 +35,23 @@ void Statement::Assign(scoped_refptr<Connection::StatementRef> ref) {
ref_ = ref;
}
-bool Statement::Run() {
+bool Statement::CheckValid() const {
if (!is_valid())
+ DLOG(FATAL) << "Cannot call mutating statements on an invalid statement.";
+ return is_valid();
+}
+
+bool Statement::Run() {
+ if (!CheckValid())
return false;
+
return CheckError(sqlite3_step(ref_->stmt())) == SQLITE_DONE;
}
bool Statement::Step() {
- if (!is_valid())
+ if (!CheckValid())
return false;
+
return CheckError(sqlite3_step(ref_->stmt())) == SQLITE_ROW;
}
@@ -55,21 +63,22 @@ void Statement::Reset() {
sqlite3_clear_bindings(ref_->stmt());
sqlite3_reset(ref_->stmt());
}
+
succeeded_ = false;
}
bool Statement::Succeeded() const {
if (!is_valid())
return false;
+
return succeeded_;
}
bool Statement::BindNull(int col) {
- if (is_valid()) {
- int err = CheckError(sqlite3_bind_null(ref_->stmt(), col + 1));
- return err == SQLITE_OK;
- }
- return false;
+ if (!is_valid())
+ return false;
+
+ return CheckOk(sqlite3_bind_null(ref_->stmt(), col + 1));
}
bool Statement::BindBool(int col, bool val) {
@@ -77,45 +86,43 @@ bool Statement::BindBool(int col, bool val) {
}
bool Statement::BindInt(int col, int val) {
- if (is_valid()) {
- int err = CheckError(sqlite3_bind_int(ref_->stmt(), col + 1, val));
- return err == SQLITE_OK;
- }
- return false;
+ if (!is_valid())
+ return false;
+
+ return CheckOk(sqlite3_bind_int(ref_->stmt(), col + 1, val));
}
bool Statement::BindInt64(int col, int64 val) {
- if (is_valid()) {
- int err = CheckError(sqlite3_bind_int64(ref_->stmt(), col + 1, val));
- return err == SQLITE_OK;
- }
- return false;
+ if (!is_valid())
+ return false;
+
+ return CheckOk(sqlite3_bind_int64(ref_->stmt(), col + 1, val));
}
bool Statement::BindDouble(int col, double val) {
- if (is_valid()) {
- int err = CheckError(sqlite3_bind_double(ref_->stmt(), col + 1, val));
- return err == SQLITE_OK;
- }
- return false;
+ if (!is_valid())
+ return false;
+
+ return CheckOk(sqlite3_bind_double(ref_->stmt(), col + 1, val));
}
bool Statement::BindCString(int col, const char* val) {
- if (is_valid()) {
- int err = CheckError(sqlite3_bind_text(ref_->stmt(), col + 1, val, -1,
- SQLITE_TRANSIENT));
- return err == SQLITE_OK;
- }
- return false;
+ if (!is_valid())
+ return false;
+
+ return CheckOk(
+ sqlite3_bind_text(ref_->stmt(), col + 1, val, -1, SQLITE_TRANSIENT));
}
bool Statement::BindString(int col, const std::string& val) {
- if (is_valid()) {
- int err = CheckError(sqlite3_bind_text(ref_->stmt(), col + 1, val.data(),
- val.size(), SQLITE_TRANSIENT));
- return err == SQLITE_OK;
- }
- return false;
+ if (!is_valid())
+ return false;
+
+ return CheckOk(sqlite3_bind_text(ref_->stmt(),
+ col + 1,
+ val.data(),
+ val.size(),
+ SQLITE_TRANSIENT));
}
bool Statement::BindString16(int col, const string16& value) {
@@ -123,19 +130,17 @@ bool Statement::BindString16(int col, const string16& value) {
}
bool Statement::BindBlob(int col, const void* val, int val_len) {
- if (is_valid()) {
- int err = CheckError(sqlite3_bind_blob(ref_->stmt(), col + 1,
- val, val_len, SQLITE_TRANSIENT));
- return err == SQLITE_OK;
- }
- return false;
+ if (!is_valid())
+ return false;
+
+ return CheckOk(
+ sqlite3_bind_blob(ref_->stmt(), col + 1, val, val_len, SQLITE_TRANSIENT));
}
int Statement::ColumnCount() const {
- if (!is_valid()) {
- NOTREACHED();
+ if (!is_valid())
return 0;
- }
+
return sqlite3_column_count(ref_->stmt());
}
@@ -155,34 +160,30 @@ bool Statement::ColumnBool(int col) const {
}
int Statement::ColumnInt(int col) const {
- if (!is_valid()) {
- NOTREACHED();
+ if (!CheckValid())
return 0;
- }
+
return sqlite3_column_int(ref_->stmt(), col);
}
int64 Statement::ColumnInt64(int col) const {
- if (!is_valid()) {
- NOTREACHED();
+ if (!CheckValid())
return 0;
- }
+
return sqlite3_column_int64(ref_->stmt(), col);
}
double Statement::ColumnDouble(int col) const {
- if (!is_valid()) {
- NOTREACHED();
+ if (!CheckValid())
return 0;
- }
+
return sqlite3_column_double(ref_->stmt(), col);
}
std::string Statement::ColumnString(int col) const {
- if (!is_valid()) {
- NOTREACHED();
+ if (!CheckValid())
return "";
- }
+
const char* str = reinterpret_cast<const char*>(
sqlite3_column_text(ref_->stmt(), col));
int len = sqlite3_column_bytes(ref_->stmt(), col);
@@ -194,36 +195,31 @@ std::string Statement::ColumnString(int col) const {
}
string16 Statement::ColumnString16(int col) const {
- if (!is_valid()) {
- NOTREACHED();
+ if (!CheckValid())
return string16();
- }
+
std::string s = ColumnString(col);
return !s.empty() ? UTF8ToUTF16(s) : string16();
}
int Statement::ColumnByteLength(int col) const {
- if (!is_valid()) {
- NOTREACHED();
+ if (!CheckValid())
return 0;
- }
+
return sqlite3_column_bytes(ref_->stmt(), col);
}
const void* Statement::ColumnBlob(int col) const {
- if (!is_valid()) {
- NOTREACHED();
+ if (!CheckValid())
return NULL;
- }
return sqlite3_column_blob(ref_->stmt(), col);
}
bool Statement::ColumnBlobAsString(int col, std::string* blob) {
- if (!is_valid()) {
- NOTREACHED();
+ if (!CheckValid())
return false;
- }
+
const void* p = ColumnBlob(col);
size_t len = ColumnByteLength(col);
blob->resize(len);
@@ -234,12 +230,11 @@ bool Statement::ColumnBlobAsString(int col, std::string* blob) {
return true;
}
-void Statement::ColumnBlobAsVector(int col, std::vector<char>* val) const {
+bool Statement::ColumnBlobAsVector(int col, std::vector<char>* val) const {
val->clear();
- if (!is_valid()) {
- NOTREACHED();
- return;
- }
+
+ if (!CheckValid())
+ return false;
const void* data = sqlite3_column_blob(ref_->stmt(), col);
int len = sqlite3_column_bytes(ref_->stmt(), col);
@@ -247,18 +242,23 @@ void Statement::ColumnBlobAsVector(int col, std::vector<char>* val) const {
val->resize(len);
memcpy(&(*val)[0], data, len);
}
+ return true;
}
-void Statement::ColumnBlobAsVector(
+bool Statement::ColumnBlobAsVector(
int col,
std::vector<unsigned char>* val) const {
- ColumnBlobAsVector(col, reinterpret_cast< std::vector<char>* >(val));
+ return ColumnBlobAsVector(col, reinterpret_cast< std::vector<char>* >(val));
}
const char* Statement::GetSQLStatement() {
return sqlite3_sql(ref_->stmt());
}
+bool Statement::CheckOk(int err) const {
+ return err == SQLITE_OK;
+}
+
int Statement::CheckError(int err) {
// Please don't add DCHECKs here, OnSqliteError() already has them.
succeeded_ = (err == SQLITE_OK || err == SQLITE_ROW || err == SQLITE_DONE);
« no previous file with comments | « sql/statement.h ('k') | sql/statement_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698