#include "config.h"
#include "IDBCursorInfo.h"
#if ENABLE(INDEXED_DATABASE)
#include "IDBDatabase.h"
#include "IDBTransaction.h"
#include "IndexedDB.h"
namespace WebCore {
IDBCursorInfo IDBCursorInfo::objectStoreCursor(IDBTransaction& transaction, uint64_t objectStoreIdentifier, const IDBKeyRangeData& range, IndexedDB::CursorDirection direction)
{
return { transaction, objectStoreIdentifier, range, direction, IndexedDB::CursorType::KeyAndValue };
}
IDBCursorInfo IDBCursorInfo::indexCursor(IDBTransaction& transaction, uint64_t objectStoreIdentifier, uint64_t indexIdentifier, const IDBKeyRangeData& range, IndexedDB::CursorDirection direction, IndexedDB::CursorType type)
{
return { transaction, objectStoreIdentifier, indexIdentifier, range, direction, type };
}
IDBCursorInfo::IDBCursorInfo()
{
}
IDBCursorInfo::IDBCursorInfo(IDBTransaction& transaction, uint64_t objectStoreIdentifier, const IDBKeyRangeData& range, IndexedDB::CursorDirection direction, IndexedDB::CursorType type)
: m_cursorIdentifier(transaction.database().connectionProxy())
, m_transactionIdentifier(transaction.info().identifier())
, m_objectStoreIdentifier(objectStoreIdentifier)
, m_sourceIdentifier(objectStoreIdentifier)
, m_range(range)
, m_source(IndexedDB::CursorSource::ObjectStore)
, m_direction(direction)
, m_type(type)
{
}
IDBCursorInfo::IDBCursorInfo(IDBTransaction& transaction, uint64_t objectStoreIdentifier, uint64_t indexIdentifier, const IDBKeyRangeData& range, IndexedDB::CursorDirection direction, IndexedDB::CursorType type)
: m_cursorIdentifier(transaction.database().connectionProxy())
, m_transactionIdentifier(transaction.info().identifier())
, m_objectStoreIdentifier(objectStoreIdentifier)
, m_sourceIdentifier(indexIdentifier)
, m_range(range)
, m_source(IndexedDB::CursorSource::Index)
, m_direction(direction)
, m_type(type)
{
}
IDBCursorInfo::IDBCursorInfo(const IDBResourceIdentifier& cursorIdentifier, const IDBResourceIdentifier& transactionIdentifier, uint64_t objectStoreIdentifier, uint64_t sourceIdentifier, const IDBKeyRangeData& range, IndexedDB::CursorSource source, IndexedDB::CursorDirection direction, IndexedDB::CursorType type)
: m_cursorIdentifier(cursorIdentifier)
, m_transactionIdentifier(transactionIdentifier)
, m_objectStoreIdentifier(objectStoreIdentifier)
, m_sourceIdentifier(sourceIdentifier)
, m_range(range)
, m_source(source)
, m_direction(direction)
, m_type(type)
{
}
bool IDBCursorInfo::isDirectionForward() const
{
return m_direction == IndexedDB::CursorDirection::Next || m_direction == IndexedDB::CursorDirection::NextNoDuplicate;
}
CursorDuplicity IDBCursorInfo::duplicity() const
{
return m_direction == IndexedDB::CursorDirection::NextNoDuplicate || m_direction == IndexedDB::CursorDirection::PrevNoDuplicate ? CursorDuplicity::NoDuplicates : CursorDuplicity::Duplicates;
}
IDBCursorInfo IDBCursorInfo::isolatedCopy() const
{
return { m_cursorIdentifier.isolatedCopy(), m_transactionIdentifier.isolatedCopy(), m_objectStoreIdentifier, m_sourceIdentifier, m_range.isolatedCopy(), m_source, m_direction, m_type };
}
}
#endif // ENABLE(INDEXED_DATABASE)