Skip to content

Commit 9832adb

Browse files
authored
Support "with" identifiers surrounded by backticks in GenericDialect (#1010)
1 parent 5709053 commit 9832adb

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

src/dialect/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ pub trait Dialect: Debug + Any {
9595
/// MySQL, MS SQL, and sqlite). You can accept one of characters listed
9696
/// in `Word::matching_end_quote` here
9797
fn is_delimited_identifier_start(&self, ch: char) -> bool {
98-
ch == '"'
98+
ch == '"' || ch == '`'
9999
}
100100
/// Determine if quoted characters are proper for identifier
101101
fn is_proper_identifier_inside_quotes(&self, mut _chars: Peekable<Chars<'_>>) -> bool {

tests/sqlparser_hive.rs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use sqlparser::ast::{
2020
SelectItem, Statement, TableFactor, UnaryOperator, Value,
2121
};
2222
use sqlparser::dialect::{GenericDialect, HiveDialect};
23-
use sqlparser::parser::ParserError;
23+
use sqlparser::parser::{ParserError, ParserOptions};
2424
use sqlparser::test_utils::*;
2525

2626
#[test]
@@ -32,6 +32,20 @@ fn parse_table_create() {
3232
hive().verified_stmt(iof);
3333
}
3434

35+
fn generic(options: Option<ParserOptions>) -> TestedDialects {
36+
TestedDialects {
37+
dialects: vec![Box::new(GenericDialect {})],
38+
options,
39+
}
40+
}
41+
42+
#[test]
43+
fn parse_describe() {
44+
let describe = r#"DESCRIBE namespace.`table`"#;
45+
hive().verified_stmt(describe);
46+
generic(None).verified_stmt(describe);
47+
}
48+
3549
#[test]
3650
fn parse_insert_overwrite() {
3751
let insert_partitions = r#"INSERT OVERWRITE TABLE db.new_table PARTITION (a = '1', b) SELECT a, b, c FROM db.table"#;
@@ -265,13 +279,8 @@ fn parse_create_function() {
265279
_ => unreachable!(),
266280
}
267281

268-
let generic = TestedDialects {
269-
dialects: vec![Box::new(GenericDialect {})],
270-
options: None,
271-
};
272-
273282
assert_eq!(
274-
generic.parse_sql_statements(sql).unwrap_err(),
283+
generic(None).parse_sql_statements(sql).unwrap_err(),
275284
ParserError::ParserError(
276285
"Expected an object type after CREATE, found: FUNCTION".to_string()
277286
)

0 commit comments

Comments
 (0)