diff --git a/query-engine/connector-test-kit-rs/query-engine-tests/tests/new/regressions/prisma_12572.rs b/query-engine/connector-test-kit-rs/query-engine-tests/tests/new/regressions/prisma_12572.rs index a107b354d159..35f056f8fa80 100644 --- a/query-engine/connector-test-kit-rs/query-engine-tests/tests/new/regressions/prisma_12572.rs +++ b/query-engine/connector-test-kit-rs/query-engine-tests/tests/new/regressions/prisma_12572.rs @@ -26,11 +26,7 @@ mod prisma_12572 { .to_owned() } - #[connector_test(exclude( - Postgres("pg.js.wasm", "neon.js.wasm"), - Sqlite("libsql.js.wasm"), - Vitess("planetscale.js.wasm") - ))] + #[connector_test] async fn all_generated_timestamps_are_the_same(runner: Runner) -> TestResult<()> { runner .query(r#"mutation { createOneTest1(data: {id:"one", test2s: { create: {id: "two"}}}) { id }}"#) diff --git a/query-engine/core/src/executor/request_context.rs b/query-engine/core/src/executor/request_context.rs index e4f0c7122ee9..f69777bfe76e 100644 --- a/query-engine/core/src/executor/request_context.rs +++ b/query-engine/core/src/executor/request_context.rs @@ -18,14 +18,15 @@ tokio::task_local! { /// /// If we had a query context we carry for the entire lifetime of the query, it would belong there. pub(crate) fn get_request_now() -> PrismaValue { - // FIXME: we want to bypass task locals if this code is executed outside of a tokio context. As - // of this writing, it happens only in the query validation test suite. - // - // Eventually, this will go away when we have a plain query context reference we pass around. - if tokio::runtime::Handle::try_current().is_err() { - return PrismaValue::DateTime(chrono::Utc::now().into()); - } - REQUEST_CONTEXT.with(|rc| rc.request_now.clone()) + REQUEST_CONTEXT.try_with(|rc| rc.request_now.clone()).unwrap_or_else(|_| + // Task local might not be set in some cases. + // At the moment of writing, this happens only in query validation test suite. + // In that case, we want to fall back to realtime value. On the other hand, if task local is + // set, we want to use it, even if we are not running inside of tokio runtime (for example, + // in WASM case) + // + // Eventually, this will go away when we have a plain query context reference we pass around. + PrismaValue::DateTime(chrono::Utc::now().into())) } /// The engine protocol used for the whole duration of a request.