Skip to content

Commit 0403295

Browse files
authored
Merge pull request #5138 from cloudflare/justin-mp/sqlite-allowUnconfirmed
Implement allowUnconfirmed for SQLite-backed DOs
2 parents 288ba1e + aab3386 commit 0403295

File tree

10 files changed

+706
-80
lines changed

10 files changed

+706
-80
lines changed

src/workerd/api/actor-state.c++

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -712,7 +712,8 @@ jsg::JsRef<jsg::JsValue> DurableObjectStorage::transactionSync(
712712
// depth to each savepoint name like I originally thought. We should refactor this -- and use
713713
// prepared statements.
714714

715-
sqlite.run(SqliteDatabase::TRUSTED, kj::str("SAVEPOINT _cf_sync_savepoint_", depth));
715+
sqlite.run(
716+
{.regulator = SqliteDatabase::TRUSTED}, kj::str("SAVEPOINT _cf_sync_savepoint_", depth));
716717
return js.tryCatch([&]() {
717718
auto result = callback(js);
718719

@@ -721,14 +722,17 @@ jsg::JsRef<jsg::JsValue> DurableObjectStorage::transactionSync(
721722
JSG_REQUIRE(!sqlite.observedCriticalError(), Error,
722723
"Cannot commit transaction due to an earlier SQL critical error");
723724

724-
sqlite.run(SqliteDatabase::TRUSTED, kj::str("RELEASE _cf_sync_savepoint_", depth));
725+
sqlite.run(
726+
{.regulator = SqliteDatabase::TRUSTED}, kj::str("RELEASE _cf_sync_savepoint_", depth));
725727
return kj::mv(result);
726728
}, [&](jsg::Value exception) -> jsg::JsRef<jsg::JsValue> {
727729
// If a critical error forced an automatic rollback, we skip the rollback and release
728730
// attempt, because savepoints should already be released.
729731
if (!sqlite.observedCriticalError()) {
730-
sqlite.run(SqliteDatabase::TRUSTED, kj::str("ROLLBACK TO _cf_sync_savepoint_", depth));
731-
sqlite.run(SqliteDatabase::TRUSTED, kj::str("RELEASE _cf_sync_savepoint_", depth));
732+
sqlite.run({.regulator = SqliteDatabase::TRUSTED},
733+
kj::str("ROLLBACK TO _cf_sync_savepoint_", depth));
734+
sqlite.run(
735+
{.regulator = SqliteDatabase::TRUSTED}, kj::str("RELEASE _cf_sync_savepoint_", depth));
732736
}
733737
js.throwException(kj::mv(exception));
734738
});

src/workerd/api/sql.c++

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ SqlStorage::IngestResult SqlStorage::ingest(jsg::Lock& js, kj::String querySql)
8383

8484
void SqlStorage::setMaxPageCountForTest(jsg::Lock& js, int count) {
8585
auto& db = getDb(js);
86-
db.run(SqliteDatabase::TRUSTED, kj::str("PRAGMA max_page_count = ", count));
86+
db.run({.regulator = SqliteDatabase::TRUSTED}, kj::str("PRAGMA max_page_count = ", count));
8787
}
8888

8989
jsg::Ref<SqlStorage::Statement> SqlStorage::prepare(jsg::Lock& js, jsg::JsString query) {
@@ -156,7 +156,7 @@ SqlStorage::Cursor::State::State(SqliteDatabase& db,
156156
kj::StringPtr sqlCode,
157157
kj::Array<BindingValue> bindingsParam)
158158
: bindings(kj::mv(bindingsParam)),
159-
query(db.run(regulator, sqlCode, mapBindings(bindings).asPtr())) {}
159+
query(db.run({.regulator = regulator}, sqlCode, mapBindings(bindings).asPtr())) {}
160160

161161
SqlStorage::Cursor::State::State(
162162
kj::Rc<CachedStatement> cachedStatementParam, kj::Array<BindingValue> bindingsParam)

0 commit comments

Comments
 (0)