Index: sql/statement.cc |
diff --git a/sql/statement.cc b/sql/statement.cc |
index a5daae49a6029f97b0950d4773a840cd5ac222cc..83c7c9b822d4645725f14b95ea4d6f1fd9e4c521 100644 |
--- a/sql/statement.cc |
+++ b/sql/statement.cc |
@@ -4,6 +4,8 @@ |
#include "sql/statement.h" |
+#include <algorithm> |
+ |
#include "base/logging.h" |
#include "base/utf_string_conversions.h" |
#include "third_party/sqlite/sqlite3.h" |
@@ -155,6 +157,23 @@ ColType Statement::ColumnType(int col) const { |
return static_cast<ColType>(sqlite3_column_type(ref_->stmt(), col)); |
} |
+ColType Statement::DeclaredColumnType(int col) const { |
+ std::string column_type(sqlite3_column_decltype(ref_->stmt(), col)); |
+ std::transform(column_type.begin(), column_type.end(), column_type.begin(), |
+ ::tolower); |
+ |
+ if (column_type == "integer") |
+ return COLUMN_TYPE_INTEGER; |
+ else if (column_type == "float") |
+ return COLUMN_TYPE_FLOAT; |
+ else if (column_type == "text") |
+ return COLUMN_TYPE_TEXT; |
+ else if (column_type == "blob") |
+ return COLUMN_TYPE_BLOB; |
+ |
+ return COLUMN_TYPE_NULL; |
+} |
+ |
bool Statement::ColumnBool(int col) const { |
return !!ColumnInt(col); |
} |
@@ -230,6 +249,19 @@ bool Statement::ColumnBlobAsString(int col, std::string* blob) { |
return true; |
} |
+bool Statement::ColumnBlobAsString16(int col, string16* val) const { |
+ if (!CheckValid()) |
+ return false; |
+ |
+ const void* data = ColumnBlob(col); |
+ size_t len = ColumnByteLength(col) / sizeof(char16); |
+ val->resize(len); |
+ if (val->size() != len) |
+ return false; |
+ val->assign(reinterpret_cast<const char16*>(data), len); |
+ return true; |
+} |
+ |
bool Statement::ColumnBlobAsVector(int col, std::vector<char>* val) const { |
val->clear(); |