sql_parse/truncate.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
use crate::{
keywords::Keyword,
parser::{ParseError, Parser},
qualified_name::parse_qualified_name,
QualifiedName, Span, Spanned,
};
/// Represent a truncate table statement
/// ```
/// # use sql_parse::{SQLDialect, SQLArguments, ParseOptions, parse_statements, TruncateTable, Statement, Issues};
/// # let options = ParseOptions::new().dialect(SQLDialect::MariaDB);
/// #
/// let sql = "TRUNCATE TABLE `t1`;";
/// let mut issues = Issues::new(sql);
/// let mut stmts = parse_statements(sql, &mut issues, &options);
///
/// # assert!(issues.is_ok(), "Issues: {}", issues);
/// #
/// let truncate_table: TruncateTable = match stmts.pop() {
/// Some(Statement::TruncateTable(c)) => c,
/// _ => panic!("We should get a truncate table statement")
/// };
///
/// assert!(truncate_table.table_name.identifier.as_str() == "t1");
///
/// ```
#[derive(Debug, Clone)]
pub struct TruncateTable<'a> {
/// Span of "TRUNCATE"
pub truncate_span: Span,
/// Span of "TABLE" if specified
pub table_span: Option<Span>,
pub table_name: QualifiedName<'a>,
}
impl<'a> Spanned for TruncateTable<'a> {
fn span(&self) -> Span {
self.truncate_span
.join_span(&self.table_span)
.join_span(&self.table_name)
}
}
pub(crate) fn parse_truncate_table<'a>(
parser: &mut Parser<'a, '_>,
) -> Result<TruncateTable<'a>, ParseError> {
let truncate_span = parser.consume_keyword(Keyword::TRUNCATE)?;
let table_span = parser.skip_keyword(Keyword::TABLE);
let table_name = parse_qualified_name(parser)?;
Ok(TruncateTable {
truncate_span,
table_span,
table_name,
})
}