Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions src/dialect/databricks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,4 +113,21 @@ impl Dialect for DatabricksDialect {
fn supports_select_item_multi_column_alias(&self) -> bool {
true
}

/// See <https://docs.databricks.com/aws/en/sql/language-manual/sql-ref-syntax-ddl-create-table-using>
fn supports_create_table_using(&self) -> bool {
true
}

/// `LONG` is an alias for `BIGINT` in Databricks SQL.
///
/// See <https://docs.databricks.com/aws/en/sql/language-manual/data-types/bigint-type>
fn supports_long_type_as_bigint(&self) -> bool {
true
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While you are adding support for Spark flags in Databricks, I believe you should also add supports_pipe_operator and parse_infix for DIV.

/// See <https://docs.databricks.com/aws/en/sql/language-manual/data-types/map-type>
fn supports_map_literal_with_angle_brackets(&self) -> bool {
true
}
}
52 changes: 52 additions & 0 deletions tests/sqlparser_databricks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -737,3 +737,55 @@ fn parse_cte_without_as() {
.parse_sql_statements("WITH cte (SELECT 1) SELECT * FROM cte")
.is_err());
}

#[test]
fn parse_create_table_using() {
match databricks().verified_stmt("CREATE TABLE t (id BIGINT) USING DELTA") {
Statement::CreateTable(CreateTable { hive_formats, .. }) => {
assert_eq!(
hive_formats.unwrap().storage,
Some(HiveIOFormat::Using {
format: Ident::new("DELTA")
})
);
}
s => panic!("Unexpected statement: {s:?}"),
}

databricks().verified_stmt("CREATE TABLE IF NOT EXISTS t (id BIGINT) USING PARQUET");

assert!(all_dialects_where(|d| !d.supports_create_table_using())

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider adding the analogous assert also for the other flags you have set

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, I believe that since this assertion regards all dialects except databricks, it should not be in the databricks tests, but in common.

.parse_sql_statements("CREATE TABLE t (id BIGINT) USING DELTA")
.is_err());
}

#[test]
fn parse_create_table_map_type() {
match databricks().verified_stmt("CREATE TABLE t (m MAP<STRING, INT>)") {
Statement::CreateTable(CreateTable { columns, .. }) => {
assert_eq!(
columns[0].data_type,
DataType::Map(
Box::new(DataType::String(None)),
Box::new(DataType::Int(None)),
MapBracketKind::AngleBrackets
)
);
}
s => panic!("Unexpected statement: {s:?}"),
}

databricks().verified_stmt("CREATE TABLE t (m MAP<STRING, ARRAY<INT>>)");
}

#[test]
fn parse_long_type_as_bigint() {
match databricks()
.one_statement_parses_to("CREATE TABLE t (id LONG)", "CREATE TABLE t (id BIGINT)")
{
Statement::CreateTable(CreateTable { columns, .. }) => {
assert_eq!(columns[0].data_type, DataType::BigInt(None));
}
s => panic!("Unexpected statement: {s:?}"),
}
}
Loading