surql_parser/upstream/sql/statements/define/
analyzer.rs1use super::DefineKind;
2use crate::upstream::fmt::{CoverStmts, EscapeKwFreeIdent, Fmt};
3use crate::upstream::sql::filter::Filter;
4use crate::upstream::sql::tokenizer::Tokenizer;
5use crate::upstream::sql::{Expr, Literal};
6use surrealdb_types::{SqlFormat, ToSql, write_sql};
7#[derive(Clone, Debug, PartialEq, Eq)]
8pub struct DefineAnalyzerStatement {
9 pub kind: DefineKind,
10 pub name: Expr,
11 pub function: Option<String>,
12 pub tokenizers: Option<Vec<Tokenizer>>,
13 pub filters: Option<Vec<Filter>>,
14 pub comment: Expr,
15}
16impl Default for DefineAnalyzerStatement {
17 fn default() -> Self {
18 Self {
19 kind: DefineKind::Default,
20 name: Expr::Literal(Literal::None),
21 function: None,
22 tokenizers: None,
23 filters: None,
24 comment: Expr::Literal(Literal::None),
25 }
26 }
27}
28impl ToSql for DefineAnalyzerStatement {
29 fn fmt_sql(&self, f: &mut String, sql_fmt: SqlFormat) {
30 write_sql!(f, sql_fmt, "DEFINE ANALYZER");
31 match self.kind {
32 DefineKind::Default => {}
33 DefineKind::Overwrite => write_sql!(f, sql_fmt, " OVERWRITE"),
34 DefineKind::IfNotExists => write_sql!(f, sql_fmt, " IF NOT EXISTS"),
35 }
36 write_sql!(f, sql_fmt, " {}", CoverStmts(&self.name));
37 if let Some(ref i) = self.function {
38 f.push_str(" FUNCTION fn");
39 for x in i.split("::") {
40 f.push_str("::");
41 EscapeKwFreeIdent(x).fmt_sql(f, sql_fmt);
42 }
43 }
44 if let Some(v) = &self.tokenizers {
45 let tokens: Vec<String> = v.iter().map(|f| f.to_sql()).collect();
46 write_sql!(f, sql_fmt, " TOKENIZERS {}", tokens.join(","));
47 }
48 if let Some(v) = &self.filters {
49 write_sql!(f, sql_fmt, " FILTERS {}", Fmt::comma_separated(v.iter()));
50 }
51 if !matches!(self.comment, Expr::Literal(Literal::None)) {
52 write_sql!(f, sql_fmt, " COMMENT {}", CoverStmts(&self.comment));
53 }
54 }
55}