surrealdb_core/syn/parser/stmt/
upsert.rs

1use reblessive::Stk;
2
3use crate::{
4	sql::{statements::UpsertStatement, Values},
5	syn::{
6		parser::{ParseResult, Parser},
7		token::t,
8	},
9};
10
11impl Parser<'_> {
12	pub async fn parse_upsert_stmt(&mut self, stk: &mut Stk) -> ParseResult<UpsertStatement> {
13		let only = self.eat(t!("ONLY"));
14		let what = Values(self.parse_what_list(stk).await?);
15		let with = self.try_parse_with()?;
16		let data = self.try_parse_data(stk).await?;
17		let cond = self.try_parse_condition(stk).await?;
18		let output = self.try_parse_output(stk).await?;
19		let timeout = self.try_parse_timeout()?;
20		let parallel = self.eat(t!("PARALLEL"));
21		let explain = self.try_parse_explain()?;
22
23		Ok(UpsertStatement {
24			only,
25			what,
26			with,
27			data,
28			cond,
29			output,
30			timeout,
31			parallel,
32			explain,
33		})
34	}
35}