blob: 0e6d9cdeb1fe1b7d7909eec65c53e2836f244356 [file] [log] [blame]
/*
* Copyright (C) 2015 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "IDBCursorInfo.h"
#if ENABLE(INDEXED_DATABASE)
#include "IDBDatabase.h"
#include "IDBTransaction.h"
#include "IndexedDB.h"
#include <wtf/text/StringConcatenateNumbers.h>
namespace WebCore {
IDBCursorInfo IDBCursorInfo::objectStoreCursor(IDBTransaction& transaction, uint64_t objectStoreIdentifier, const IDBKeyRangeData& range, IndexedDB::CursorDirection direction, IndexedDB::CursorType type)
{
return { transaction, objectStoreIdentifier, range, direction, type };
}
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::Nextunique;
}
CursorDuplicity IDBCursorInfo::duplicity() const
{
return m_direction == IndexedDB::CursorDirection::Nextunique || m_direction == IndexedDB::CursorDirection::Prevunique ? 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 };
}
#if !LOG_DISABLED
String IDBCursorInfo::loggingString() const
{
if (m_source == IndexedDB::CursorSource::Index)
return makeString("<Crsr: ", m_cursorIdentifier.loggingString(), " Idx ", m_sourceIdentifier, ", OS ", m_objectStoreIdentifier, ", tx ", m_transactionIdentifier.loggingString(), '>');
return makeString("<Crsr: ", m_cursorIdentifier.loggingString(), " OS ", m_objectStoreIdentifier, ", tx ", m_transactionIdentifier.loggingString(), '>');
}
#endif
} // namespace WebCore
#endif // ENABLE(INDEXED_DATABASE)