Skip to content

Commit a9db6ed

Browse files
authored
Support USE db (apache#565)
1 parent 71c3ec0 commit a9db6ed

File tree

4 files changed

+25
-0
lines changed

4 files changed

+25
-0
lines changed

src/ast/mod.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1016,6 +1016,10 @@ pub enum Statement {
10161016
table_name: ObjectName,
10171017
filter: Option<ShowStatementFilter>,
10181018
},
1019+
/// USE
1020+
///
1021+
/// Note: This is a MySQL-specific statement.
1022+
Use { db_name: Ident },
10191023
/// `{ BEGIN [ TRANSACTION | WORK ] | START TRANSACTION } ...`
10201024
StartTransaction { modes: Vec<TransactionMode> },
10211025
/// `SET TRANSACTION ...`
@@ -1825,6 +1829,10 @@ impl fmt::Display for Statement {
18251829
}
18261830
Ok(())
18271831
}
1832+
Statement::Use { db_name } => {
1833+
write!(f, "USE {}", db_name)?;
1834+
Ok(())
1835+
}
18281836
Statement::StartTransaction { modes } => {
18291837
write!(f, "START TRANSACTION")?;
18301838
if !modes.is_empty() {

src/keywords.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,7 @@ define_keywords!(
535535
UPDATE,
536536
UPPER,
537537
USAGE,
538+
USE,
538539
USER,
539540
USING,
540541
UUID,

src/parser.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ impl<'a> Parser<'a> {
177177
Keyword::CLOSE => Ok(self.parse_close()?),
178178
Keyword::SET => Ok(self.parse_set()?),
179179
Keyword::SHOW => Ok(self.parse_show()?),
180+
Keyword::USE => Ok(self.parse_use()?),
180181
Keyword::GRANT => Ok(self.parse_grant()?),
181182
Keyword::REVOKE => Ok(self.parse_revoke()?),
182183
Keyword::START => Ok(self.parse_start_transaction()?),
@@ -3776,6 +3777,11 @@ impl<'a> Parser<'a> {
37763777
}
37773778
}
37783779

3780+
pub fn parse_use(&mut self) -> Result<Statement, ParserError> {
3781+
let db_name = self.parse_identifier()?;
3782+
Ok(Statement::Use { db_name })
3783+
}
3784+
37793785
pub fn parse_table_and_joins(&mut self) -> Result<TableWithJoins, ParserError> {
37803786
let relation = self.parse_table_factor()?;
37813787
// Note that for keywords to be properly handled here, they need to be

tests/sqlparser_mysql.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,16 @@ fn parse_show_create() {
138138
}
139139
}
140140

141+
#[test]
142+
fn parse_use() {
143+
assert_eq!(
144+
mysql_and_generic().verified_stmt("USE mydb"),
145+
Statement::Use {
146+
db_name: Ident::new("mydb")
147+
}
148+
);
149+
}
150+
141151
#[test]
142152
fn parse_create_table_auto_increment() {
143153
let sql = "CREATE TABLE foo (bar INT PRIMARY KEY AUTO_INCREMENT)";

0 commit comments

Comments
 (0)