Skip to main content

surql_parser/upstream/sql/statements/alter/
system.rs

1use crate::upstream::sql::Expr;
2use crate::upstream::sql::statements::alter::AlterKind;
3use surrealdb_types::{SqlFormat, ToSql, write_sql};
4#[derive(Clone, Debug, Default, Eq, PartialEq)]
5/// AST node for `ALTER SYSTEM`.
6///
7/// Supported operations:
8/// - `QUERY_TIMEOUT <duration>`: sets the global query timeout
9/// - `DROP QUERY_TIMEOUT`: clears the global query timeout
10/// - `COMPACT`: requests datastore‑wide compaction
11pub struct AlterSystemStatement {
12	/// Tri‑state alteration for the `QUERY_TIMEOUT` parameter.
13	pub query_timeout: AlterKind<Expr>,
14	/// When true, emits `COMPACT`.
15	pub compact: bool,
16}
17impl ToSql for AlterSystemStatement {
18	fn fmt_sql(&self, f: &mut String, fmt: SqlFormat) {
19		write_sql!(f, fmt, "ALTER SYSTEM");
20		match &self.query_timeout {
21			AlterKind::None => {}
22			AlterKind::Set(duration) => {
23				write_sql!(f, fmt, " QUERY_TIMEOUT {}", duration);
24			}
25			AlterKind::Drop => {
26				write_sql!(f, fmt, " DROP QUERY_TIMEOUT");
27			}
28		}
29		if self.compact {
30			write_sql!(f, fmt, " COMPACT");
31		}
32	}
33}