Skip to content

Commit 9314c1d

Browse files
authored
Update parser (#33)
* Update parser * Update version * Update parser and external table * Fix external table * Fix external table
1 parent d2f0bc6 commit 9314c1d

3 files changed

Lines changed: 27 additions & 3 deletions

File tree

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ recursive = "0.1.1"
164164
regex = "1.8"
165165
rstest = "0.24.0"
166166
serde_json = "1"
167-
sqlparser = { git = "https://github.com/Embucket/datafusion-sqlparser-rs.git", rev = "12655c2be19d4796236154f8826e23f84d2978b0", features = [
167+
sqlparser = { git = "https://github.com/Embucket/datafusion-sqlparser-rs.git", rev = "4a91f2fd6af1b6d413621949e724c55c34f8a29b", features = [
168168
"visitor",
169169
] }
170170
tempfile = "3"

datafusion/sql/src/parser.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,12 @@ impl<'a> DFParser<'a> {
470470
Token::Word(w) => {
471471
match w.keyword {
472472
Keyword::CREATE => {
473+
if let Token::Word(w) = self.parser.peek_nth_token(2).token {
474+
// use native parser for CREATE EXTERNAL VOLUME
475+
if w.keyword == Keyword::VOLUME {
476+
return self.parse_and_handle_statement();
477+
}
478+
}
473479
self.parser.next_token(); // CREATE
474480
self.parse_create()
475481
}
@@ -1595,6 +1601,24 @@ mod tests {
15951601
Ok(())
15961602
}
15971603

1604+
#[test]
1605+
fn skip_external_volume() -> Result<(), DataFusionError> {
1606+
let sql = "CREATE OR REPLACE EXTERNAL VOLUME exvol STORAGE_LOCATIONS =
1607+
((NAME = 's3' STORAGE_PROVIDER = 'S3' STORAGE_BASE_URL = 's3://my-example-bucket/' ))";
1608+
let dialect = Box::new(SnowflakeDialect);
1609+
let statements = DFParser::parse_sql_with_dialect(sql, dialect.as_ref())?;
1610+
1611+
assert_eq!(
1612+
statements.len(),
1613+
1,
1614+
"Expected to parse exactly one statement"
1615+
);
1616+
if let Statement::CreateExternalTable(_) = &statements[0] {
1617+
panic!("Expected non CREATE EXTERNAL TABLE statement, but was successful: {statements:?}");
1618+
}
1619+
Ok(())
1620+
}
1621+
15981622
#[test]
15991623
fn explain_copy_to_table_to_table() -> Result<(), DataFusionError> {
16001624
let cases = vec![

0 commit comments

Comments
 (0)