mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-07-07 17:04:59 +00:00
Add OR ALTER
support for CREATE VIEW
(#1818)
This commit is contained in:
parent
2eb1e7bdd4
commit
87d190734c
4 changed files with 27 additions and 2 deletions
|
@ -3063,6 +3063,10 @@ pub enum Statement {
|
|||
/// CREATE VIEW
|
||||
/// ```
|
||||
CreateView {
|
||||
/// True if this is a `CREATE OR ALTER VIEW` statement
|
||||
///
|
||||
/// [MsSql](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-view-transact-sql)
|
||||
or_alter: bool,
|
||||
or_replace: bool,
|
||||
materialized: bool,
|
||||
/// View name
|
||||
|
@ -4623,6 +4627,7 @@ impl fmt::Display for Statement {
|
|||
Ok(())
|
||||
}
|
||||
Statement::CreateView {
|
||||
or_alter,
|
||||
name,
|
||||
or_replace,
|
||||
columns,
|
||||
|
@ -4639,7 +4644,8 @@ impl fmt::Display for Statement {
|
|||
} => {
|
||||
write!(
|
||||
f,
|
||||
"CREATE {or_replace}",
|
||||
"CREATE {or_alter}{or_replace}",
|
||||
or_alter = if *or_alter { "OR ALTER " } else { "" },
|
||||
or_replace = if *or_replace { "OR REPLACE " } else { "" },
|
||||
)?;
|
||||
if let Some(params) = params {
|
||||
|
|
|
@ -384,6 +384,7 @@ impl Spanned for Statement {
|
|||
),
|
||||
Statement::Delete(delete) => delete.span(),
|
||||
Statement::CreateView {
|
||||
or_alter: _,
|
||||
or_replace: _,
|
||||
materialized: _,
|
||||
name,
|
||||
|
|
|
@ -4548,7 +4548,7 @@ impl<'a> Parser<'a> {
|
|||
self.parse_create_table(or_replace, temporary, global, transient)
|
||||
} else if self.parse_keyword(Keyword::MATERIALIZED) || self.parse_keyword(Keyword::VIEW) {
|
||||
self.prev_token();
|
||||
self.parse_create_view(or_replace, temporary, create_view_params)
|
||||
self.parse_create_view(or_alter, or_replace, temporary, create_view_params)
|
||||
} else if self.parse_keyword(Keyword::POLICY) {
|
||||
self.parse_create_policy()
|
||||
} else if self.parse_keyword(Keyword::EXTERNAL) {
|
||||
|
@ -5512,6 +5512,7 @@ impl<'a> Parser<'a> {
|
|||
|
||||
pub fn parse_create_view(
|
||||
&mut self,
|
||||
or_alter: bool,
|
||||
or_replace: bool,
|
||||
temporary: bool,
|
||||
create_view_params: Option<CreateViewParams>,
|
||||
|
@ -5576,6 +5577,7 @@ impl<'a> Parser<'a> {
|
|||
]);
|
||||
|
||||
Ok(Statement::CreateView {
|
||||
or_alter,
|
||||
name,
|
||||
columns,
|
||||
query,
|
||||
|
|
|
@ -7840,6 +7840,7 @@ fn parse_create_view() {
|
|||
let sql = "CREATE VIEW myschema.myview AS SELECT foo FROM bar";
|
||||
match verified_stmt(sql) {
|
||||
Statement::CreateView {
|
||||
or_alter,
|
||||
name,
|
||||
columns,
|
||||
query,
|
||||
|
@ -7854,6 +7855,7 @@ fn parse_create_view() {
|
|||
to,
|
||||
params,
|
||||
} => {
|
||||
assert_eq!(or_alter, false);
|
||||
assert_eq!("myschema.myview", name.to_string());
|
||||
assert_eq!(Vec::<ViewColumnDef>::new(), columns);
|
||||
assert_eq!("SELECT foo FROM bar", query.to_string());
|
||||
|
@ -7870,6 +7872,8 @@ fn parse_create_view() {
|
|||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
|
||||
let _ = verified_stmt("CREATE OR ALTER VIEW v AS SELECT 1");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -7904,6 +7908,7 @@ fn parse_create_view_with_columns() {
|
|||
// match all_dialects().verified_stmt(sql) {
|
||||
match all_dialects_except(|d| d.is::<ClickHouseDialect>()).verified_stmt(sql) {
|
||||
Statement::CreateView {
|
||||
or_alter,
|
||||
name,
|
||||
columns,
|
||||
or_replace,
|
||||
|
@ -7918,6 +7923,7 @@ fn parse_create_view_with_columns() {
|
|||
to,
|
||||
params,
|
||||
} => {
|
||||
assert_eq!(or_alter, false);
|
||||
assert_eq!("v", name.to_string());
|
||||
assert_eq!(
|
||||
columns,
|
||||
|
@ -7951,6 +7957,7 @@ fn parse_create_view_temporary() {
|
|||
let sql = "CREATE TEMPORARY VIEW myschema.myview AS SELECT foo FROM bar";
|
||||
match verified_stmt(sql) {
|
||||
Statement::CreateView {
|
||||
or_alter,
|
||||
name,
|
||||
columns,
|
||||
query,
|
||||
|
@ -7965,6 +7972,7 @@ fn parse_create_view_temporary() {
|
|||
to,
|
||||
params,
|
||||
} => {
|
||||
assert_eq!(or_alter, false);
|
||||
assert_eq!("myschema.myview", name.to_string());
|
||||
assert_eq!(Vec::<ViewColumnDef>::new(), columns);
|
||||
assert_eq!("SELECT foo FROM bar", query.to_string());
|
||||
|
@ -7988,6 +7996,7 @@ fn parse_create_or_replace_view() {
|
|||
let sql = "CREATE OR REPLACE VIEW v AS SELECT 1";
|
||||
match verified_stmt(sql) {
|
||||
Statement::CreateView {
|
||||
or_alter,
|
||||
name,
|
||||
columns,
|
||||
or_replace,
|
||||
|
@ -8002,6 +8011,7 @@ fn parse_create_or_replace_view() {
|
|||
to,
|
||||
params,
|
||||
} => {
|
||||
assert_eq!(or_alter, false);
|
||||
assert_eq!("v", name.to_string());
|
||||
assert_eq!(columns, vec![]);
|
||||
assert_eq!(options, CreateTableOptions::None);
|
||||
|
@ -8029,6 +8039,7 @@ fn parse_create_or_replace_materialized_view() {
|
|||
let sql = "CREATE OR REPLACE MATERIALIZED VIEW v AS SELECT 1";
|
||||
match verified_stmt(sql) {
|
||||
Statement::CreateView {
|
||||
or_alter,
|
||||
name,
|
||||
columns,
|
||||
or_replace,
|
||||
|
@ -8043,6 +8054,7 @@ fn parse_create_or_replace_materialized_view() {
|
|||
to,
|
||||
params,
|
||||
} => {
|
||||
assert_eq!(or_alter, false);
|
||||
assert_eq!("v", name.to_string());
|
||||
assert_eq!(columns, vec![]);
|
||||
assert_eq!(options, CreateTableOptions::None);
|
||||
|
@ -8066,6 +8078,7 @@ fn parse_create_materialized_view() {
|
|||
let sql = "CREATE MATERIALIZED VIEW myschema.myview AS SELECT foo FROM bar";
|
||||
match verified_stmt(sql) {
|
||||
Statement::CreateView {
|
||||
or_alter,
|
||||
name,
|
||||
or_replace,
|
||||
columns,
|
||||
|
@ -8080,6 +8093,7 @@ fn parse_create_materialized_view() {
|
|||
to,
|
||||
params,
|
||||
} => {
|
||||
assert_eq!(or_alter, false);
|
||||
assert_eq!("myschema.myview", name.to_string());
|
||||
assert_eq!(Vec::<ViewColumnDef>::new(), columns);
|
||||
assert_eq!("SELECT foo FROM bar", query.to_string());
|
||||
|
@ -8103,6 +8117,7 @@ fn parse_create_materialized_view_with_cluster_by() {
|
|||
let sql = "CREATE MATERIALIZED VIEW myschema.myview CLUSTER BY (foo) AS SELECT foo FROM bar";
|
||||
match verified_stmt(sql) {
|
||||
Statement::CreateView {
|
||||
or_alter,
|
||||
name,
|
||||
or_replace,
|
||||
columns,
|
||||
|
@ -8117,6 +8132,7 @@ fn parse_create_materialized_view_with_cluster_by() {
|
|||
to,
|
||||
params,
|
||||
} => {
|
||||
assert_eq!(or_alter, false);
|
||||
assert_eq!("myschema.myview", name.to_string());
|
||||
assert_eq!(Vec::<ViewColumnDef>::new(), columns);
|
||||
assert_eq!("SELECT foo FROM bar", query.to_string());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue