Skip to main content

surrealdb_expr/expr/statements/
set.rs

1use surrealdb_cnf::PROTECTED_PARAM_NAMES;
2use surrealdb_strand::Strand;
3use surrealdb_types::{SqlFormat, ToSql};
4
5use crate::expr::{Expr, Kind};
6
7#[derive(Clone, Debug, Eq, PartialEq, Hash)]
8pub struct SetStatement {
9	pub name: Strand,
10	pub what: Expr,
11	pub kind: Option<Kind>,
12}
13
14impl SetStatement {
15	/// Check if we require a writeable transaction
16	pub fn read_only(&self) -> bool {
17		self.what.read_only()
18	}
19
20	/// returns if the set is setting a protected param.
21	pub fn is_protected_set(&self) -> bool {
22		PROTECTED_PARAM_NAMES.contains(&self.name.as_str())
23	}
24}
25
26impl ToSql for SetStatement {
27	fn fmt_sql(&self, f: &mut String, fmt: SqlFormat) {
28		let sql_stmt: crate::sql::statements::SetStatement = self.clone().into();
29		sql_stmt.fmt_sql(f, fmt);
30	}
31}
32
33#[cfg(test)]
34mod tests {
35	use surrealdb_types::ToSql;
36
37	use crate::syn;
38
39	#[test]
40	fn check_type() {
41		let query = syn::expr("LET $param = 5").unwrap();
42		assert_eq!(query.to_sql(), "LET $param = 5");
43
44		let query = syn::expr("LET $param: number = 5").unwrap();
45		assert_eq!(query.to_sql(), "LET $param: number = 5");
46	}
47}