diff options
author | benm@chromium.org <benm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-10 13:31:59 +0000 |
---|---|---|
committer | benm@chromium.org <benm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-10 13:31:59 +0000 |
commit | 98b6f8b1b8f96602e74d431eff2296c582b01275 (patch) | |
tree | 9074ed279c02247caca0e58bd28f720fa350e484 /sql/statement.cc | |
parent | 9517c6326e123542fab29f20874dcdd8d48d7f83 (diff) | |
download | chromium_src-98b6f8b1b8f96602e74d431eff2296c582b01275.zip chromium_src-98b6f8b1b8f96602e74d431eff2296c582b01275.tar.gz chromium_src-98b6f8b1b8f96602e74d431eff2296c582b01275.tar.bz2 |
Create a class to represent a Dom Storage Database.
Add a class that can read/write a local storage database in the same format as WebCore's StorageArea.
Also add a method to sql::Statement to query the declared type of a column and a method to return a string16 from a Blob.
BUG=106763
Review URL: http://codereview.chromium.org/9159020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@121442 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sql/statement.cc')
-rw-r--r-- | sql/statement.cc | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/sql/statement.cc b/sql/statement.cc index a5daae4..4fa3459 100644 --- a/sql/statement.cc +++ b/sql/statement.cc @@ -1,9 +1,11 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #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(); |