void IDBCursor::advance(unsigned long count, ExceptionCode& ec) { LOG(IndexedDB, "IDBCursor::advance"); if (!m_request) { ec = IDBDatabaseException::InvalidStateError; return; } if (!count) { ec = TypeError; return; } if (sourcesDeleted()) { ec = IDBDatabaseException::InvalidStateError; return; } if (!transaction().isActive()) { ec = IDBDatabaseException::TransactionInactiveError; return; } if (!m_gotValue) { ec = IDBDatabaseException::InvalidStateError; return; } m_gotValue = false; uncheckedIteratorCursor(IDBKeyData(), count); }
void IDBCursor::continueFunction(const IDBKeyData& key, ExceptionCodeWithMessage& ec) { LOG(IndexedDB, "IDBCursor::continueFunction"); if (!m_request) { ec.code = IDBDatabaseException::InvalidStateError; return; } if (sourcesDeleted()) { ec.code = IDBDatabaseException::InvalidStateError; return; } if (!transaction().isActive()) { ec.code = IDBDatabaseException::TransactionInactiveError; ec.message = ASCIILiteral("Failed to execute 'continue' on 'IDBCursor': The transaction is inactive or finished."); return; } if (!m_gotValue) { ec.code = IDBDatabaseException::InvalidStateError; ec.message = ASCIILiteral("Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end."); return; } if (!key.isNull() && !key.isValid()) { ec.code = IDBDatabaseException::DataError; ec.message = ASCIILiteral("Failed to execute 'continue' on 'IDBCursor': The parameter is not a valid key."); return; } if (m_info.isDirectionForward()) { if (!key.isNull() && key.compare(m_currentPrimaryKeyData) <= 0) { ec.code = IDBDatabaseException::DataError; ec.message = ASCIILiteral("Failed to execute 'continue' on 'IDBCursor': The parameter is less than or equal to this cursor's position."); return; } } else if (!key.isNull() && key.compare(m_currentPrimaryKeyData) >= 0) { ec.code = IDBDatabaseException::DataError; ec.message = ASCIILiteral("Failed to execute 'continue' on 'IDBCursor': The parameter is greater than or equal to this cursor's position."); return; } m_gotValue = false; uncheckedIteratorCursor(key, 0); }
void IDBCursor::continueFunction(const IDBKeyData& key, ExceptionCode& ec) { LOG(IndexedDB, "IDBCursor::continueFunction"); if (!m_request) { ec = IDBDatabaseException::InvalidStateError; return; } if (sourcesDeleted()) { ec = IDBDatabaseException::InvalidStateError; return; } if (!transaction().isActive()) { ec = IDBDatabaseException::TransactionInactiveError; return; } if (!m_gotValue) { ec = IDBDatabaseException::InvalidStateError; return; } if (!key.isNull() && !key.isValid()) { ec = IDBDatabaseException::DataError; return; } if (m_info.isDirectionForward()) { if (!key.isNull() && key.compare(m_currentPrimaryKeyData) <= 0) { ec = IDBDatabaseException::DataError; return; } } else if (!key.isNull() && key.compare(m_currentPrimaryKeyData) >= 0) { ec = IDBDatabaseException::DataError; return; } m_gotValue = false; uncheckedIteratorCursor(key, 0); }
void IDBCursor::advance(unsigned long count, ExceptionCodeWithMessage& ec) { LOG(IndexedDB, "IDBCursor::advance"); if (!m_request) { ec.code = IDBDatabaseException::InvalidStateError; return; } if (!count) { ec.code = TypeError; ec.message = ASCIILiteral("Failed to execute 'advance' on 'IDBCursor': A count argument with value 0 (zero) was supplied, must be greater than 0."); return; } if (sourcesDeleted()) { ec.code = IDBDatabaseException::InvalidStateError; return; } if (!transaction().isActive()) { ec.code = IDBDatabaseException::TransactionInactiveError; ec.message = ASCIILiteral("Failed to execute 'advance' on 'IDBCursor': The transaction is inactive or finished."); return; } if (!m_gotValue) { ec.code = IDBDatabaseException::InvalidStateError; ec.message = ASCIILiteral("Failed to execute 'advance' on 'IDBCursor': The cursor is being iterated or has iterated past its end."); return; } m_gotValue = false; uncheckedIteratorCursor(IDBKeyData(), count); }