diff --git a/engine/packages/error/src/error.rs b/engine/packages/error/src/error.rs index e7b9e2c56d..31eccea633 100644 --- a/engine/packages/error/src/error.rs +++ b/engine/packages/error/src/error.rs @@ -1,14 +1,7 @@ use crate::INTERNAL_ERROR; use crate::schema::RivetErrorSchema; use serde::Serialize; -use std::{fmt, sync::OnceLock}; - -static EXPOSE_INTERNAL_ERRORS: OnceLock = OnceLock::new(); - -fn expose_internal_errors() -> bool { - *EXPOSE_INTERNAL_ERRORS - .get_or_init(|| matches!(std::env::var("RIVET_EXPOSE_ERRORS").as_deref(), Ok("1"))) -} +use std::fmt; #[derive(Debug, Clone)] pub struct RivetError { @@ -36,7 +29,7 @@ impl RivetError { Self { schema: &INTERNAL_ERROR, meta, - message: expose_internal_errors().then(|| format!("Internal error: {}", error)), + message: Some(format!("{}", error)), } } diff --git a/rivetkit-rust/engine/artifacts/errors/sqlite.query_failed.json b/rivetkit-rust/engine/artifacts/errors/sqlite.query_failed.json new file mode 100644 index 0000000000..13bb0fc8a8 --- /dev/null +++ b/rivetkit-rust/engine/artifacts/errors/sqlite.query_failed.json @@ -0,0 +1,5 @@ +{ + "code": "query_failed", + "group": "sqlite", + "message": "SQL query failed." +} \ No newline at end of file diff --git a/rivetkit-rust/packages/rivetkit-core/src/actor/sqlite.rs b/rivetkit-rust/packages/rivetkit-core/src/actor/sqlite.rs index c250699ed2..b5ac2b4965 100644 --- a/rivetkit-rust/packages/rivetkit-core/src/actor/sqlite.rs +++ b/rivetkit-rust/packages/rivetkit-core/src/actor/sqlite.rs @@ -633,7 +633,11 @@ fn map_local_worker_error(error: anyhow::Error) -> anyhow::Error { return SqliteRuntimeError::Closed.build(); } - error + // User SQL errors (syntax, constraints, etc.) + SqliteRuntimeError::QueryFailed { + message: format!("{error}"), + } + .build() } fn protocol_bind_params(params: Vec) -> Vec { diff --git a/rivetkit-rust/packages/rivetkit-core/src/error.rs b/rivetkit-rust/packages/rivetkit-core/src/error.rs index 672771b8f6..77c9a54054 100644 --- a/rivetkit-rust/packages/rivetkit-core/src/error.rs +++ b/rivetkit-rust/packages/rivetkit-core/src/error.rs @@ -20,6 +20,7 @@ pub fn public_error_status_code(group: &str, code: &str) -> Option { | "complete_not_configured" | "timed_out", ) => Some(400), + ("sqlite", "query_failed") => Some(400), _ => None, } } @@ -192,6 +193,9 @@ pub(crate) enum SqliteRuntimeError { "Remote SQLite generation is stale: {reason}" )] RemoteFenceMismatch { reason: String }, + + #[error("query_failed", "SQL query failed.", "SQL query failed: {message}")] + QueryFailed { message: String }, } #[derive(RivetError, Debug, Clone, Deserialize, Serialize)]