Skip to main content

surql_parser/upstream/sql/statements/
rebuild.rs

1use crate::upstream::fmt::{EscapeKwFreeIdent, EscapeKwIdent};
2use surrealdb_types::{SqlFormat, ToSql, write_sql};
3#[derive(Clone, Debug, Eq, PartialEq, Hash)]
4#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
5pub enum RebuildStatement {
6	Index(RebuildIndexStatement),
7}
8impl ToSql for RebuildStatement {
9	fn fmt_sql(&self, f: &mut String, fmt: SqlFormat) {
10		match self {
11			Self::Index(v) => v.fmt_sql(f, fmt),
12		}
13	}
14}
15#[derive(Clone, Debug, Default, Eq, PartialEq, PartialOrd, Hash)]
16#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
17pub struct RebuildIndexStatement {
18	pub name: String,
19	pub what: String,
20	pub if_exists: bool,
21	pub concurrently: bool,
22}
23impl ToSql for RebuildIndexStatement {
24	fn fmt_sql(&self, f: &mut String, fmt: SqlFormat) {
25		write_sql!(f, fmt, "REBUILD INDEX");
26		if self.if_exists {
27			write_sql!(f, fmt, " IF EXISTS");
28		}
29		write_sql!(
30			f,
31			fmt,
32			" {} ON {}",
33			EscapeKwIdent(&self.name, &["IF"]),
34			EscapeKwFreeIdent(&self.what)
35		);
36		if self.concurrently {
37			write_sql!(f, fmt, " CONCURRENTLY");
38		}
39	}
40}