Skip to main content

surrealdb_sql/statements/alter/
analyzer.rs

1use common::fmt::{Fmt, QuoteStr};
2use surrealdb_types::{SqlFormat, ToSql, write_sql};
3
4use super::AlterKind;
5use crate::analyzer_function::fmt_analyzer_function;
6use crate::filter::Filter;
7use crate::tokenizer::{Tokenizer, write_tokenizers_sql};
8use crate::{CoverStmts, Expr, Literal};
9
10#[derive(Clone, Debug, Eq, PartialEq)]
11#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
12/// AST node for `ALTER ANALYZER`.
13pub struct AlterAnalyzerStatement {
14	pub name: Expr,
15	pub if_exists: bool,
16	pub function: AlterKind<String>,
17	pub tokenizers: AlterKind<Vec<Tokenizer>>,
18	pub filters: AlterKind<Vec<Filter>>,
19	pub comment: AlterKind<String>,
20}
21
22impl Default for AlterAnalyzerStatement {
23	fn default() -> Self {
24		Self {
25			name: Expr::Literal(Literal::None),
26			if_exists: false,
27			function: AlterKind::None,
28			tokenizers: AlterKind::None,
29			filters: AlterKind::None,
30			comment: AlterKind::None,
31		}
32	}
33}
34
35impl ToSql for AlterAnalyzerStatement {
36	fn fmt_sql(&self, f: &mut String, fmt: SqlFormat) {
37		write_sql!(f, fmt, "ALTER ANALYZER");
38		if self.if_exists {
39			write_sql!(f, fmt, " IF EXISTS");
40		}
41		write_sql!(f, fmt, " {}", CoverStmts(&self.name));
42
43		match self.function {
44			AlterKind::Set(ref v) => fmt_analyzer_function(f, fmt, v),
45			AlterKind::Drop => f.push_str(" DROP FUNCTION"),
46			AlterKind::None => {}
47		}
48
49		match self.tokenizers {
50			AlterKind::Set(ref v) => {
51				write_sql!(f, fmt, " TOKENIZERS ");
52				write_tokenizers_sql(f, fmt, v.iter().copied());
53			}
54			AlterKind::Drop => f.push_str(" DROP TOKENIZERS"),
55			AlterKind::None => {}
56		}
57
58		match self.filters {
59			AlterKind::Set(ref v) => {
60				write_sql!(f, fmt, " FILTERS {}", Fmt::comma_separated(v.iter()));
61			}
62			AlterKind::Drop => f.push_str(" DROP FILTERS"),
63			AlterKind::None => {}
64		}
65
66		match self.comment {
67			AlterKind::Set(ref v) => write_sql!(f, fmt, " COMMENT {}", QuoteStr(v)),
68			AlterKind::Drop => f.push_str(" DROP COMMENT"),
69			AlterKind::None => {}
70		}
71	}
72}