summaryrefslogtreecommitdiffstats
path: root/chrome/common/sqlite_utils.cc
diff options
context:
space:
mode:
authorphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-30 19:33:53 +0000
committerphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-30 19:33:53 +0000
commit9660ddd38561758694488c7110a7edbeacb1b305 (patch)
treea08b6f154d33fa14365addf0681ee0f78b35220e /chrome/common/sqlite_utils.cc
parent769d3c1343f9a53a9ade10146c48f022adb099d8 (diff)
downloadchromium_src-9660ddd38561758694488c7110a7edbeacb1b305.zip
chromium_src-9660ddd38561758694488c7110a7edbeacb1b305.tar.gz
chromium_src-9660ddd38561758694488c7110a7edbeacb1b305.tar.bz2
Correct sqlite wrapper behavior on systems where wchar_t is UTF-32,
for example Linux. The problem was that old code assumed wstring is UTF-16, which resulted in string corruption on Linux. I actually tested it on browser/history unit tests, see http://codereview.chromium.org/18758. Review URL: http://codereview.chromium.org/18805 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8977 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common/sqlite_utils.cc')
-rw-r--r--chrome/common/sqlite_utils.cc36
1 files changed, 11 insertions, 25 deletions
diff --git a/chrome/common/sqlite_utils.cc b/chrome/common/sqlite_utils.cc
index e45614a..a1d62bc 100644
--- a/chrome/common/sqlite_utils.cc
+++ b/chrome/common/sqlite_utils.cc
@@ -6,6 +6,7 @@
#include "base/file_path.h"
#include "base/logging.h"
+#include "base/string16.h"
int OpenSqliteDb(const FilePath& filepath, sqlite3** database) {
#if defined(OS_WIN)
@@ -203,16 +204,6 @@ int SQLStatement::prepare(sqlite3* db, const char* sql, int sql_len) {
return rv;
}
-int SQLStatement::prepare16(sqlite3* db, const wchar_t* sql, int sql_len) {
- DCHECK(!stmt_);
- sql_len *= sizeof(wchar_t);
- int rv = sqlite3_prepare16_v2(db, sql, sql_len, &stmt_, NULL);
- if (rv != SQLITE_OK) {
- DLOG(ERROR) << "SQLStatement.prepare16_v2 failed: " << sqlite3_errmsg(db);
- }
- return rv;
-}
-
int SQLStatement::step() {
DCHECK(stmt_);
return sqlite3_step(stmt_);
@@ -289,10 +280,10 @@ int SQLStatement::bind_text(int index, const char* value, int value_len,
return sqlite3_bind_text(stmt_, index + 1, value, value_len, dtor);
}
-int SQLStatement::bind_text16(int index, const wchar_t* value, int value_len,
+int SQLStatement::bind_text16(int index, const char16* value, int value_len,
Function dtor) {
DCHECK(stmt_);
- value_len *= sizeof(wchar_t);
+ value_len *= sizeof(char16);
return sqlite3_bind_text16(stmt_, index + 1, value, value_len, dtor);
}
@@ -311,11 +302,6 @@ int SQLStatement::column_type(int index) {
return sqlite3_column_type(stmt_, index);
}
-const wchar_t* SQLStatement::column_name16(int index) {
- DCHECK(stmt_);
- return static_cast<const wchar_t*>( sqlite3_column_name16(stmt_, index) );
-}
-
const void* SQLStatement::column_blob(int index) {
DCHECK(stmt_);
return sqlite3_column_blob(stmt_, index);
@@ -386,7 +372,7 @@ bool SQLStatement::column_string(int index, std::string* str) {
DCHECK(stmt_);
DCHECK(str);
const char* s = column_text(index);
-str->assign(s ? s : std::string(""));
+ str->assign(s ? s : std::string());
return s != NULL;
}
@@ -396,22 +382,22 @@ std::string SQLStatement::column_string(int index) {
return str;
}
-const wchar_t* SQLStatement::column_text16(int index) {
+const char16* SQLStatement::column_text16(int index) {
DCHECK(stmt_);
- return static_cast<const wchar_t*>( sqlite3_column_text16(stmt_, index) );
+ return static_cast<const char16*>(sqlite3_column_text16(stmt_, index));
}
-bool SQLStatement::column_string16(int index, std::wstring* str) {
+bool SQLStatement::column_wstring(int index, std::wstring* str) {
DCHECK(stmt_);
DCHECK(str);
- const wchar_t* s = column_text16(index);
- str->assign(s ? s : std::wstring(L""));
+ const char* s = column_text(index);
+ str->assign(s ? UTF8ToWide(s) : std::wstring());
return (s != NULL);
}
-std::wstring SQLStatement::column_string16(int index) {
+std::wstring SQLStatement::column_wstring(int index) {
std::wstring wstr;
- column_string16(index, &wstr);
+ column_wstring(index, &wstr);
return wstr;
}