diff --git a/libsql-server/src/connection/config.rs b/libsql-server/src/connection/config.rs index 4ed541e2a8d..1b225a61898 100644 --- a/libsql-server/src/connection/config.rs +++ b/libsql-server/src/connection/config.rs @@ -31,6 +31,13 @@ pub struct DatabaseConfig { pub shared_schema_name: Option, } +impl DatabaseConfig { + #[inline] + pub fn block_ddl(&self) -> bool { + self.shared_schema_name.is_some() + } +} + const fn default_max_size() -> u64 { bytesize::ByteSize::pb(1000).as_u64() / LIBSQL_PAGE_SIZE } diff --git a/libsql-server/src/connection/libsql.rs b/libsql-server/src/connection/libsql.rs index b8e0722e576..7a32a750be8 100644 --- a/libsql-server/src/connection/libsql.rs +++ b/libsql-server/src/connection/libsql.rs @@ -806,6 +806,7 @@ impl Connection { let blocked = match query.stmt.kind { StmtKind::Read | StmtKind::TxnBegin | StmtKind::Other => config.block_reads, StmtKind::Write => config.block_reads || config.block_writes, + StmtKind::DDL => config.block_reads || config.block_writes || config.block_ddl(), StmtKind::TxnEnd | StmtKind::Release | StmtKind::Savepoint => false, StmtKind::Attach | StmtKind::Detach => !config.allow_attach, }; diff --git a/libsql-server/src/query_analysis.rs b/libsql-server/src/query_analysis.rs index eec9064afa5..691f7d4b258 100644 --- a/libsql-server/src/query_analysis.rs +++ b/libsql-server/src/query_analysis.rs @@ -36,6 +36,7 @@ pub enum StmtKind { Release, Attach, Detach, + DDL, Other, }