mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-07-07 17:04:59 +00:00
Add snowflake dialect (#259)
This commit is contained in:
parent
2c6c295dd0
commit
f500a42e99
5 changed files with 66 additions and 0 deletions
|
@ -39,6 +39,7 @@ $ cargo run --feature json_example --example cli FILENAME.sql [--dialectname]
|
|||
"--ansi" => Box::new(AnsiDialect {}),
|
||||
"--postgres" => Box::new(PostgreSqlDialect {}),
|
||||
"--ms" => Box::new(MsSqlDialect {}),
|
||||
"--snowflake" => Box::new(SnowflakeDialect {}),
|
||||
"--generic" | "" => Box::new(GenericDialect {}),
|
||||
s => panic!("Unexpected parameter: {}", s),
|
||||
};
|
||||
|
|
|
@ -16,6 +16,7 @@ pub mod keywords;
|
|||
mod mssql;
|
||||
mod mysql;
|
||||
mod postgresql;
|
||||
mod snowflake;
|
||||
mod sqlite;
|
||||
|
||||
use std::any::{Any, TypeId};
|
||||
|
@ -26,6 +27,7 @@ pub use self::generic::GenericDialect;
|
|||
pub use self::mssql::MsSqlDialect;
|
||||
pub use self::mysql::MySqlDialect;
|
||||
pub use self::postgresql::PostgreSqlDialect;
|
||||
pub use self::snowflake::SnowflakeDialect;
|
||||
pub use self::sqlite::SQLiteDialect;
|
||||
|
||||
/// `dialect_of!(parser is SQLiteDialect | GenericDialect)` evaluates
|
||||
|
|
31
src/dialect/snowflake.rs
Normal file
31
src/dialect/snowflake.rs
Normal file
|
@ -0,0 +1,31 @@
|
|||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
use crate::dialect::Dialect;
|
||||
|
||||
#[derive(Debug, Default)]
|
||||
pub struct SnowflakeDialect;
|
||||
|
||||
impl Dialect for SnowflakeDialect {
|
||||
// see https://docs.snowflake.com/en/sql-reference/identifiers-syntax.html
|
||||
fn is_identifier_start(&self, ch: char) -> bool {
|
||||
(ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch == '_'
|
||||
}
|
||||
|
||||
fn is_identifier_part(&self, ch: char) -> bool {
|
||||
(ch >= 'a' && ch <= 'z')
|
||||
|| (ch >= 'A' && ch <= 'Z')
|
||||
|| (ch >= '0' && ch <= '9')
|
||||
|| ch == '$'
|
||||
|| ch == '_'
|
||||
}
|
||||
}
|
|
@ -119,6 +119,7 @@ pub fn all_dialects() -> TestedDialects {
|
|||
Box::new(PostgreSqlDialect {}),
|
||||
Box::new(MsSqlDialect {}),
|
||||
Box::new(AnsiDialect {}),
|
||||
Box::new(SnowflakeDialect {}),
|
||||
],
|
||||
}
|
||||
}
|
||||
|
|
31
tests/sqlparser_snowflake.rs
Normal file
31
tests/sqlparser_snowflake.rs
Normal file
|
@ -0,0 +1,31 @@
|
|||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
use sqlparser::ast::*;
|
||||
use sqlparser::dialect::{GenericDialect, SnowflakeDialect};
|
||||
use sqlparser::test_utils::*;
|
||||
|
||||
#[test]
|
||||
fn test_snowflake_create_table() {
|
||||
let sql = "CREATE TABLE _my_$table (am00unt number)";
|
||||
match snowflake_and_generic().verified_stmt(sql) {
|
||||
Statement::CreateTable { name, .. } => {
|
||||
assert_eq!("_my_$table", name.to_string());
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
||||
fn snowflake_and_generic() -> TestedDialects {
|
||||
TestedDialects {
|
||||
dialects: vec![Box::new(SnowflakeDialect {}), Box::new(GenericDialect {})],
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue