use super::{Expr, Idiom, PartialNode, Spanned};
use crate::span::ByteRange;
#[derive(Clone, Debug, PartialEq)]
pub enum Projection {
Wildcard(ByteRange),
Expr {
expr: Spanned<Expr>,
alias: Option<Spanned<String>>,
},
Partial(PartialNode),
}
#[derive(Clone, Debug, PartialEq)]
pub enum ReturnMode {
None,
Null,
Diff,
Before,
After,
Fields(Vec<Projection>),
}
#[derive(Clone, Debug, PartialEq)]
pub enum DataClause {
Set(Vec<Assignment>),
Unset(Vec<Spanned<Idiom>>),
Content(Spanned<Expr>),
Merge(Spanned<Expr>),
Patch(Spanned<Expr>),
Replace(Spanned<Expr>),
Single(Spanned<Expr>),
Partial(PartialNode),
}
#[derive(Clone, Debug, PartialEq)]
pub struct Assignment {
pub target: Spanned<Idiom>,
pub op: Spanned<AssignOp>,
pub value: Spanned<Expr>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum AssignOp {
Assign,
Add,
Sub,
Extend,
Other(String),
}
#[derive(Clone, Debug, PartialEq)]
pub struct OrderClause {
pub keys: Vec<OrderKey>,
}
#[derive(Clone, Debug, PartialEq)]
pub struct OrderKey {
pub expr: Spanned<Expr>,
pub descending: bool,
}
#[derive(Clone, Debug, PartialEq)]
pub struct GroupClause {
pub all: bool,
pub keys: Vec<Spanned<Idiom>>,
}