summaryrefslogtreecommitdiffstats
path: root/WebCore/storage/IDBKey.cpp
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-05-05 14:36:32 +0100
committerBen Murdoch <benm@google.com>2011-05-10 15:38:30 +0100
commitf05b935882198ccf7d81675736e3aeb089c5113a (patch)
tree4ea0ca838d9ef1b15cf17ddb3928efb427c7e5a1 /WebCore/storage/IDBKey.cpp
parent60fbdcc62bced8db2cb1fd233cc4d1e4ea17db1b (diff)
downloadexternal_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.cpp47
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);