OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 | 148 |
149 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this
), m_transaction.get()); | 149 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this
), m_transaction.get()); |
150 request->setCursorDetails(IndexedDB::CursorKeyOnly, direction); | 150 request->setCursorDetails(IndexedDB::CursorKeyOnly, direction); |
151 backendDB()->openCursor(m_transaction->id(), m_objectStore->id(), m_metadata
.id, keyRange.release(), direction, true, WebIDBDatabase::NormalTask, WebIDBCall
backsImpl::create(request).leakPtr()); | 151 backendDB()->openCursor(m_transaction->id(), m_objectStore->id(), m_metadata
.id, keyRange.release(), direction, true, WebIDBDatabase::NormalTask, WebIDBCall
backsImpl::create(request).leakPtr()); |
152 return request; | 152 return request; |
153 } | 153 } |
154 | 154 |
155 PassRefPtr<IDBRequest> IDBIndex::get(ExecutionContext* context, const ScriptValu
e& key, ExceptionState& exceptionState) | 155 PassRefPtr<IDBRequest> IDBIndex::get(ExecutionContext* context, const ScriptValu
e& key, ExceptionState& exceptionState) |
156 { | 156 { |
157 IDB_TRACE("IDBIndex::get"); | 157 IDB_TRACE("IDBIndex::get"); |
158 if (isDeleted()) { | 158 return getInternal(context, key, exceptionState, false); |
159 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::indexDe
letedErrorMessage); | |
160 return 0; | |
161 } | |
162 if (m_transaction->isFinished()) { | |
163 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionFinishedErrorMessage); | |
164 return 0; | |
165 } | |
166 if (!m_transaction->isActive()) { | |
167 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionInactiveErrorMessage); | |
168 return 0; | |
169 } | |
170 | |
171 RefPtr<IDBKeyRange> keyRange = IDBKeyRange::fromScriptValue(context, key, ex
ceptionState); | |
172 if (exceptionState.hadException()) | |
173 return 0; | |
174 if (!keyRange) { | |
175 exceptionState.throwDOMException(DataError, IDBDatabase::noKeyOrKeyRange
ErrorMessage); | |
176 return 0; | |
177 } | |
178 | |
179 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this
), m_transaction.get()); | |
180 backendDB()->get(m_transaction->id(), m_objectStore->id(), m_metadata.id, ke
yRange.release(), false, WebIDBCallbacksImpl::create(request).leakPtr()); | |
181 return request; | |
182 } | 159 } |
183 | 160 |
184 PassRefPtr<IDBRequest> IDBIndex::getKey(ExecutionContext* context, const ScriptV
alue& key, ExceptionState& exceptionState) | 161 PassRefPtr<IDBRequest> IDBIndex::getKey(ExecutionContext* context, const ScriptV
alue& key, ExceptionState& exceptionState) |
185 { | 162 { |
186 IDB_TRACE("IDBIndex::getKey"); | 163 IDB_TRACE("IDBIndex::getKey"); |
| 164 return getInternal(context, key, exceptionState, true); |
| 165 } |
| 166 |
| 167 PassRefPtr<IDBRequest> IDBIndex::getInternal(ExecutionContext* context, const Sc
riptValue& key, ExceptionState& exceptionState, bool keyOnly) |
| 168 { |
187 if (isDeleted()) { | 169 if (isDeleted()) { |
188 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::indexDe
letedErrorMessage); | 170 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::indexDe
letedErrorMessage); |
189 return 0; | 171 return 0; |
190 } | 172 } |
191 if (m_transaction->isFinished()) { | 173 if (m_transaction->isFinished()) { |
192 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionFinishedErrorMessage); | 174 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionFinishedErrorMessage); |
193 return 0; | 175 return 0; |
194 } | 176 } |
195 if (!m_transaction->isActive()) { | 177 if (!m_transaction->isActive()) { |
196 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionInactiveErrorMessage); | 178 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionInactiveErrorMessage); |
197 return 0; | 179 return 0; |
198 } | 180 } |
199 | 181 |
200 RefPtr<IDBKeyRange> keyRange = IDBKeyRange::fromScriptValue(context, key, ex
ceptionState); | 182 RefPtr<IDBKeyRange> keyRange = IDBKeyRange::fromScriptValue(context, key, ex
ceptionState); |
201 if (exceptionState.hadException()) | 183 if (exceptionState.hadException()) |
202 return 0; | 184 return 0; |
203 if (!keyRange) { | 185 if (!keyRange) { |
204 exceptionState.throwDOMException(DataError, IDBDatabase::noKeyOrKeyRange
ErrorMessage); | 186 exceptionState.throwDOMException(DataError, IDBDatabase::noKeyOrKeyRange
ErrorMessage); |
205 return 0; | 187 return 0; |
206 } | 188 } |
207 | 189 |
208 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this
), m_transaction.get()); | 190 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this
), m_transaction.get()); |
209 backendDB()->get(m_transaction->id(), m_objectStore->id(), m_metadata.id, ke
yRange.release(), true, WebIDBCallbacksImpl::create(request).leakPtr()); | 191 backendDB()->get(m_transaction->id(), m_objectStore->id(), m_metadata.id, ke
yRange.release(), keyOnly, WebIDBCallbacksImpl::create(request).leakPtr()); |
210 return request; | 192 return request; |
211 } | 193 } |
212 | 194 |
213 WebIDBDatabase* IDBIndex::backendDB() const | 195 WebIDBDatabase* IDBIndex::backendDB() const |
214 { | 196 { |
215 return m_transaction->backendDB(); | 197 return m_transaction->backendDB(); |
216 } | 198 } |
217 | 199 |
218 bool IDBIndex::isDeleted() const | 200 bool IDBIndex::isDeleted() const |
219 { | 201 { |
220 return m_deleted || m_objectStore->isDeleted(); | 202 return m_deleted || m_objectStore->isDeleted(); |
221 } | 203 } |
222 | 204 |
223 } // namespace WebCore | 205 } // namespace WebCore |
OLD | NEW |