mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-09-02 12:17:21 +00:00
Support SHOW <var>
and SET <var>
This commit is contained in:
parent
f64928e994
commit
e1ded184f8
4 changed files with 168 additions and 9 deletions
|
@ -125,9 +125,9 @@ impl Parser {
|
|||
"UPDATE" => Ok(self.parse_update()?),
|
||||
"ALTER" => Ok(self.parse_alter()?),
|
||||
"COPY" => Ok(self.parse_copy()?),
|
||||
"SET" => Ok(self.parse_set()?),
|
||||
"SHOW" => Ok(self.parse_show()?),
|
||||
"START" => Ok(self.parse_start_transaction()?),
|
||||
"SET" => Ok(self.parse_set_transaction()?),
|
||||
// `BEGIN` is a nonstandard but common alias for the
|
||||
// standard `START TRANSACTION` statement. It is supported
|
||||
// by at least PostgreSQL and MySQL.
|
||||
|
@ -1593,6 +1593,30 @@ impl Parser {
|
|||
})
|
||||
}
|
||||
|
||||
pub fn parse_set(&mut self) -> Result<Statement, ParserError> {
|
||||
let modifier = self.parse_one_of_keywords(&["SESSION", "LOCAL"]);
|
||||
let variable = self.parse_identifier()?;
|
||||
if self.consume_token(&Token::Eq) || self.parse_keyword("TO") {
|
||||
let token = self.peek_token();
|
||||
let value = match (self.parse_value(), token) {
|
||||
(Ok(value), _) => SetVariableValue::Literal(value),
|
||||
(Err(_), Some(Token::Word(ident))) => SetVariableValue::Ident(ident.as_ident()),
|
||||
(Err(_), other) => self.expected("variable value", other)?,
|
||||
};
|
||||
Ok(Statement::SetVariable {
|
||||
local: modifier == Some("LOCAL"),
|
||||
variable,
|
||||
value,
|
||||
})
|
||||
} else if variable == "TRANSACTION" && modifier.is_none() {
|
||||
Ok(Statement::SetTransaction {
|
||||
modes: self.parse_transaction_modes()?,
|
||||
})
|
||||
} else {
|
||||
self.expected("equals sign or TO", self.peek_token())
|
||||
}
|
||||
}
|
||||
|
||||
pub fn parse_show(&mut self) -> Result<Statement, ParserError> {
|
||||
if self
|
||||
.parse_one_of_keywords(&["EXTENDED", "FULL", "COLUMNS", "FIELDS"])
|
||||
|
@ -1601,7 +1625,9 @@ impl Parser {
|
|||
self.prev_token();
|
||||
self.parse_show_columns()
|
||||
} else {
|
||||
self.expected("EXTENDED, FULL, COLUMNS, or FIELDS", self.peek_token())
|
||||
Ok(Statement::ShowVariable {
|
||||
variable: self.parse_identifier()?,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1973,13 +1999,6 @@ impl Parser {
|
|||
})
|
||||
}
|
||||
|
||||
pub fn parse_set_transaction(&mut self) -> Result<Statement, ParserError> {
|
||||
self.expect_keyword("TRANSACTION")?;
|
||||
Ok(Statement::SetTransaction {
|
||||
modes: self.parse_transaction_modes()?,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn parse_transaction_modes(&mut self) -> Result<Vec<TransactionMode>, ParserError> {
|
||||
let mut modes = vec![];
|
||||
let mut required = false;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue