Taym95 · GitHub

@Wzy312

delete_database now removes the directories rows of the target
database explicitly, inside the same transaction and ahead of the
parent row. The foreign_keys pragma applies per connection, and the
dedicated transaction connections open with it off, so the explicit
delete replaces the cascade on this path. A device check after
create and delete shows the registry clean of that database and
free of orphan directories rows.
A write whose SQL execution fails now ends the batch. The native
transaction rolls back and every queued callback reports the error.
Validation failures that leave the store untouched, such as a
missing key, an exhausted key generator, or an unknown store, keep
reporting through their own request while the batch continues.
Widening the abort to those cases pushed upgrade transactions into
the abort path that servo#43950 deferred, and turned seven
WPT keypath subtests into device timeouts. The engine comment now matches this
behavior.
The quota bucket covers RDB_E_SQLITE_IOERR alongside
RDB_E_SQLITE_FULL. The Api error carries a bare status code, so the
mapping reads the code directly, while the ENOSPC source-chain
check keeps serving the Io variant. This is slightly broader than
the sqlite twin, where an IOERR also needs an ENOSPC in its chain.
A device-tier unit test pins the mapping end to end against a
max_page_count-limited store, with the pragma set on the
transaction connection where it takes effect.
The three on-device unit tests expect the rdb/ subdirectory that
RDB creates under the database dir. The integration tier now builds
for the device target, with the crate-level gate lifted and the
inner webstorage gate removed, while tests/client_storage.rs keeps
its gate for rusqlite. Four engine-agnostic IndexedDB cases join
the suite, covering cross-type key sort order, key-range open and
closed bounds, auto-increment, and a batch write failure surfacing
an error. The two path-included test modules carry
allow(dead_code), which restores a warning-free host test build.
The webstorage load-failure warning now says the in-memory map
starts empty and the final save is skipped.
This round was validated with cargo test -p servo-storage on a
Linux host, 52 tests passing with a warning-free build, and with
cargo test --no-run for the aarch64-unknown-linux-ohos target with
the ohos-rdb-backend feature, which also builds warning-free. On
the device, the ten WPT storage tests match desktop expectations on
1218 of 1225 subtests, and the previous device-tested build
reproduces the same seven-timeout keypath pattern on the same day,
which places the drift in the environment. The six storage
cases pass, an interior-NUL value survives a process kill and
restart, and the registry row checks above come from the pulled
reg.rdb.
AI-assissted: Yes (agent session; implementation and testing on
device)

Read the original on github.com ↗