LibDatabase previously truncated String values at the first '\0' when
round-tripping through SQLite due to the use of strlen.
This is something which we should support according to WPT:
https://wpt.live/webstorage/storage_setitem.window.html
The above test works fine when run through our test-web harness
as we have the SQL database disabled, so this instead adds a C++
test.
By default, sqlite will fill missing placeholder values with NULL. There
isn't a situation where we want this, so let's assert that the correct
number of placeholders were provided by the caller.
Let's do this by default. The APIs to override these are provided if
needed.
In a simple localStorage.setItem loop:
for (let i = 0; i < 100; ++i) {
localStorage.setItem(`item_${i}`, `value_${i}`);
}
This reduces the runtime from ~3.5 seconds to ~50 milliseconds on my
machine.
Co-Authored-By: Tim Ledbetter <tim.ledbetter@ladybird.org>
We currently store ByteString as TEXT, but that is interpreted by SQLite
as UTF-8. All string-related operations will try to operate on the text
as if it is stored with UTF-8. We should use BLOB instead, which does
not make any encoding assumptions.
The only user of ByteString in the database currently is the HTTP disk
cache. So we bump its version here to remove existing data. Again, we
will want to handle changes like this more gracefully eventually.
It currently lives in LibWebView as it was only used for cookies and
local storage, both of which are managed in the UI process. Let's move
it to its own library now to allow other processes to use it, without
having to depend on LibWebView (and therefore LibWeb).
2025-10-14 13:40:33 +02:00
Renamed from Libraries/LibWebView/Database.cpp (Browse further)