Skip to content

Commit d6250ba

Browse files
MazterQyouovr
authored andcommitted
feat: Support USE db
1 parent a9d45cc commit d6250ba

File tree

4 files changed

+25
-0
lines changed

4 files changed

+25
-0
lines changed

src/ast/mod.rs

+8
Original file line numberDiff line numberDiff line change
@@ -760,6 +760,10 @@ pub enum Statement {
760760
///
761761
/// Note: this is a MySQL-specific statement.
762762
ShowCollation { filter: Option<ShowStatementFilter> },
763+
/// USE
764+
///
765+
/// Note: this is a MySQL-specific statement.
766+
Use { db_name: Ident },
763767
/// `{ BEGIN [ TRANSACTION | WORK ] | START TRANSACTION } ...`
764768
StartTransaction { modes: Vec<TransactionMode> },
765769
/// `SET TRANSACTION ...`
@@ -1407,6 +1411,10 @@ impl fmt::Display for Statement {
14071411
}
14081412
Ok(())
14091413
}
1414+
Statement::Use { db_name } => {
1415+
write!(f, "USE {}", db_name)?;
1416+
Ok(())
1417+
}
14101418
Statement::StartTransaction { modes } => {
14111419
write!(f, "START TRANSACTION")?;
14121420
if !modes.is_empty() {

src/keywords.rs

+1
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,7 @@ define_keywords!(
475475
UNNEST,
476476
UPDATE,
477477
UPPER,
478+
USE,
478479
USER,
479480
USING,
480481
UUID,

src/parser.rs

+6
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ impl<'a> Parser<'a> {
157157
Keyword::COPY => Ok(self.parse_copy()?),
158158
Keyword::SET => Ok(self.parse_set()?),
159159
Keyword::SHOW => Ok(self.parse_show()?),
160+
Keyword::USE => Ok(self.parse_use()?),
160161
Keyword::START => Ok(self.parse_start_transaction()?),
161162
// `BEGIN` is a nonstandard but common alias for the
162163
// standard `START TRANSACTION` statement. It is supported
@@ -2801,6 +2802,11 @@ impl<'a> Parser<'a> {
28012802
}
28022803
}
28032804

2805+
pub fn parse_use(&mut self) -> Result<Statement, ParserError> {
2806+
let db_name = self.parse_identifier()?;
2807+
Ok(Statement::Use { db_name })
2808+
}
2809+
28042810
pub fn parse_table_and_joins(&mut self) -> Result<TableWithJoins, ParserError> {
28052811
let relation = self.parse_table_factor()?;
28062812

tests/sqlparser_mysql.rs

+10
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,16 @@ fn parse_show_collation() {
182182
);
183183
}
184184

185+
#[test]
186+
fn parse_use() {
187+
assert_eq!(
188+
mysql_and_generic().verified_stmt("USE database_name"),
189+
Statement::Use {
190+
db_name: Ident::new("database_name")
191+
}
192+
);
193+
}
194+
185195
#[test]
186196
fn parse_show_create() {
187197
let obj_name = ObjectName(vec![Ident::new("myident")]);

0 commit comments

Comments
 (0)