Bug 247053
| Summary: | IDBObjectStore.put() deletes object on unique index violation | ||
|---|---|---|---|
| Product: | WebKit | Reporter: | David Fahlander <david.fahlander> |
| Component: | Website Storage | Assignee: | Nobody <webkit-unassigned> |
| Status: | NEW | ||
| Severity: | Normal | CC: | sihui_liu, webkit-bug-importer |
| Priority: | P2 | Keywords: | InRadar |
| Version: | Safari 16 | ||
| Hardware: | Mac (Intel) | ||
| OS: | macOS 12 | ||
David Fahlander
Calling IDBObjectStore.put(object) resulting in a constraint violation, should leave the database as if the operation did not take place, but if the operation fails due to a violation of a unique index, the end result will be a deletion of the object.
Repro link: https://jsitor.com/0oBx-UC93
The repro has an object store "users" with primary key "id" and unique index on property "username".
First, it adds two objects in the object store:
{id: 1, username: "foo"}
{id: 2, username: "bar"}
Then, it does a put operation with {id: 1, username: "bar"}, which would violate the uniqueness of the username index because "bar" is already occupied by the second object (with id 2).
After that transaction has ended (auto-committed), the repro will list all users in the database and only find the second entry.
| Attachments | ||
|---|---|---|
| Add attachment proposed patch, testcase, etc. |
Radar WebKit Bug Importer
<rdar://problem/101850333>