diff options
author | Ben Murdoch <benm@google.com> | 2011-05-05 14:36:32 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-05-10 15:38:30 +0100 |
commit | f05b935882198ccf7d81675736e3aeb089c5113a (patch) | |
tree | 4ea0ca838d9ef1b15cf17ddb3928efb427c7e5a1 /WebCore/storage/IDBKey.cpp | |
parent | 60fbdcc62bced8db2cb1fd233cc4d1e4ea17db1b (diff) | |
download | external_webkit-f05b935882198ccf7d81675736e3aeb089c5113a.zip external_webkit-f05b935882198ccf7d81675736e3aeb089c5113a.tar.gz external_webkit-f05b935882198ccf7d81675736e3aeb089c5113a.tar.bz2 |
Merge WebKit at r74534: Initial merge by git.
Change-Id: I6ccd1154fa1b19c2ec2a66878eb675738735f1eb
Diffstat (limited to 'WebCore/storage/IDBKey.cpp')
-rw-r--r-- | WebCore/storage/IDBKey.cpp | 47 |
1 files changed, 24 insertions, 23 deletions
diff --git a/WebCore/storage/IDBKey.cpp b/WebCore/storage/IDBKey.cpp index d400382..5f45543 100644 --- a/WebCore/storage/IDBKey.cpp +++ b/WebCore/storage/IDBKey.cpp @@ -38,36 +38,25 @@ IDBKey::IDBKey() { } -IDBKey::IDBKey(double number) - : m_type(NumberType) - , m_number(number) -{ -} - -IDBKey::IDBKey(const String& string) - : m_type(StringType) - , m_string(string.crossThreadString()) -{ -} - IDBKey::~IDBKey() { } PassRefPtr<IDBKey> IDBKey::fromQuery(SQLiteStatement& query, int baseColumn) { + if (query.columnCount() <= baseColumn) + return 0; + if (!query.isColumnNull(baseColumn)) - return IDBKey::create(query.getColumnText(baseColumn)); + return IDBKey::createString(query.getColumnText(baseColumn)); - if (!query.isColumnNull(baseColumn + 1)) { - ASSERT_NOT_REACHED(); // FIXME: Implement date. - return IDBKey::create(); - } + if (!query.isColumnNull(baseColumn + 1)) + return IDBKey::createDate(query.getColumnDouble(baseColumn + 1)); if (!query.isColumnNull(baseColumn + 2)) - return IDBKey::create(query.getColumnDouble(baseColumn + 2)); + return IDBKey::createNumber(query.getColumnDouble(baseColumn + 2)); - return IDBKey::create(); // Null. + return IDBKey::createNull(); } bool IDBKey::isEqual(IDBKey* other) @@ -78,7 +67,8 @@ bool IDBKey::isEqual(IDBKey* other) switch (m_type) { case StringType: return other->m_string == m_string; - // FIXME: Implement dates. + case DateType: + return other->m_date == m_date; case NumberType: return other->m_number == m_number; case NullType: @@ -96,7 +86,8 @@ String IDBKey::whereSyntax(String qualifiedTableName) const return qualifiedTableName + "keyString = ? AND " + qualifiedTableName + "keyDate IS NULL AND " + qualifiedTableName + "keyNumber IS NULL "; case IDBKey::NumberType: return qualifiedTableName + "keyString IS NULL AND " + qualifiedTableName + "keyDate IS NULL AND " + qualifiedTableName + "keyNumber = ? "; - // FIXME: Implement date. + case IDBKey::DateType: + return qualifiedTableName + "keyString IS NULL AND " + qualifiedTableName + "keyDate = ? AND " + qualifiedTableName + "keyNumber IS NULL "; case IDBKey::NullType: return qualifiedTableName + "keyString IS NULL AND " + qualifiedTableName + "keyDate IS NULL AND " + qualifiedTableName + "keyNumber IS NULL "; } @@ -110,7 +101,8 @@ String IDBKey::lowerCursorWhereFragment(String comparisonOperator, String qualif switch (m_type) { case StringType: return "? " + comparisonOperator + " " + qualifiedTableName + "keyString AND "; - // FIXME: Implement date. + case DateType: + return "(? " + comparisonOperator + " " + qualifiedTableName + "keyDate OR NOT " + qualifiedTableName + "keyString IS NULL) AND "; case NumberType: return "(? " + comparisonOperator + " " + qualifiedTableName + "keyNumber OR NOT " + qualifiedTableName + "keyString IS NULL OR NOT " + qualifiedTableName + "keyDate IS NULL) AND "; case NullType: @@ -127,7 +119,8 @@ String IDBKey::upperCursorWhereFragment(String comparisonOperator, String qualif switch (m_type) { case StringType: return "(" + qualifiedTableName + "keyString " + comparisonOperator + " ? OR " + qualifiedTableName + "keyString IS NULL) AND "; - // FIXME: Implement date. + case DateType: + return "(" + qualifiedTableName + "keyDate " + comparisonOperator + " ? OR " + qualifiedTableName + "keyDate IS NULL) AND " + qualifiedTableName + "keyString IS NULL AND "; case NumberType: return "(" + qualifiedTableName + "keyNumber " + comparisonOperator + " ? OR " + qualifiedTableName + "keyNumber IS NULL) AND " + qualifiedTableName + "keyString IS NULL AND " + qualifiedTableName + "keyDate IS NULL AND "; case NullType: @@ -146,6 +139,9 @@ int IDBKey::bind(SQLiteStatement& query, int column) const case IDBKey::StringType: query.bindText(column, m_string); return 1; + case IDBKey::DateType: + query.bindDouble(column, m_date); + return 1; case IDBKey::NumberType: query.bindDouble(column, m_number); return 1; @@ -165,6 +161,11 @@ void IDBKey::bindWithNulls(SQLiteStatement& query, int baseColumn) const query.bindNull(baseColumn + 1); query.bindNull(baseColumn + 2); break; + case IDBKey::DateType: + query.bindNull(baseColumn + 0); + query.bindDouble(baseColumn + 1, m_date); + query.bindNull(baseColumn + 2); + break; case IDBKey::NumberType: query.bindNull(baseColumn + 0); query.bindNull(baseColumn + 1); |