Struct sql_parse::InsertReplace
source · [−]pub struct InsertReplace<'a> {
pub type_: InsertReplaceType,
pub flags: Vec<InsertReplaceFlag>,
pub into_span: Option<Span>,
pub table: Vec<Identifier<'a>>,
pub columns: Vec<Identifier<'a>>,
pub values: Option<(Span, Vec<Vec<Expression<'a>>>)>,
pub select: Option<Select<'a>>,
pub set: Option<(Span, Vec<(Identifier<'a>, Span, Expression<'a>)>)>,
pub on_duplicate_key_update: Option<(Span, Vec<(Identifier<'a>, Span, Expression<'a>)>)>,
}
Expand description
Representation of Insert or Replace Statement
let sql1 = "INSERT INTO person (first_name, last_name) VALUES ('John', 'Doe')";
let stmt1 = parse_statement(sql1, &mut issues, &options);
let sql2 = "INSERT INTO contractor SELECT * FROM person WHERE status = 'c'";
let stmt2 = parse_statement(sql2, &mut issues, &options);
let sql3 = "INSERT INTO account (`key`, `value`) VALUES ('foo', 42)
ON DUPLICATE KEY UPDATE `value`=`value`+42";
let stmt3 = parse_statement(sql3, &mut issues, &options);
let i: InsertReplace = match stmt1 {
Some(Statement::InsertReplace(
i @ InsertReplace{type_: InsertReplaceType::Insert(_), ..})) => i,
_ => panic!("We should get an insert statement")
};
assert!(i.table[0].as_str() == "person");
println!("{:#?}", i.values.unwrap());
let sql = "REPLACE INTO t2 VALUES (1,'Leopard'),(2,'Dog')";
let stmt = parse_statement(sql, &mut issues, &options);
let r: InsertReplace = match stmt {
Some(Statement::InsertReplace(
r @ InsertReplace{type_: InsertReplaceType::Replace(_), ..})) => r,
_ => panic!("We should get an replace statement")
};
assert!(r.table[0].as_str() == "t2");
println!("{:#?}", r.values.unwrap());
Fields
type_: InsertReplaceType
Span of “INSERT” or “REPLACE”
flags: Vec<InsertReplaceFlag>
Flags specified after “INSERT”
into_span: Option<Span>
Span of “INTO” if specified
table: Vec<Identifier<'a>>
Table to insert into
columns: Vec<Identifier<'a>>
List of columns to set
values: Option<(Span, Vec<Vec<Expression<'a>>>)>
Span of values “VALUES” and list of tuples to insert if specified
select: Option<Select<'a>>
Select statement to insert if specified
set: Option<(Span, Vec<(Identifier<'a>, Span, Expression<'a>)>)>
Span of “SET” and list of key, value pairs to set if specified
on_duplicate_key_update: Option<(Span, Vec<(Identifier<'a>, Span, Expression<'a>)>)>
Updates to execute on duplicate key
Trait Implementations
sourceimpl<'a> Clone for InsertReplace<'a>
impl<'a> Clone for InsertReplace<'a>
sourcefn clone(&self) -> InsertReplace<'a>
fn clone(&self) -> InsertReplace<'a>
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl<'a> Debug for InsertReplace<'a>
impl<'a> Debug for InsertReplace<'a>
sourceimpl<'a> Spanned for InsertReplace<'a>
impl<'a> Spanned for InsertReplace<'a>
Auto Trait Implementations
impl<'a> RefUnwindSafe for InsertReplace<'a>
impl<'a> Send for InsertReplace<'a>
impl<'a> Sync for InsertReplace<'a>
impl<'a> Unpin for InsertReplace<'a>
impl<'a> UnwindSafe for InsertReplace<'a>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
🔬 This is a nightly-only experimental API. (
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more