From 4aeba6ae077fc9f01b05c0669a1d1f903500a831 Mon Sep 17 00:00:00 2001 From: Cedric Vangout Date: Tue, 12 Dec 2023 15:52:29 +0100 Subject: [PATCH] feat: support "create view" with relpersistence --- crates/codegen/src/get_node_properties.rs | 11 +++++++++++ crates/parser/src/codegen.rs | 16 ++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/crates/codegen/src/get_node_properties.rs b/crates/codegen/src/get_node_properties.rs index 9da04fb7..d7437b31 100644 --- a/crates/codegen/src/get_node_properties.rs +++ b/crates/codegen/src/get_node_properties.rs @@ -439,6 +439,17 @@ fn custom_handlers(node: &Node) -> TokenStream { tokens.push(TokenProperty::from(Token::Or)); tokens.push(TokenProperty::from(Token::Replace)); } + if let Some(n) = &n.view { + match n.relpersistence.as_str() { + // Permanent + "p" => {}, + // Unlogged + "u" => tokens.push(TokenProperty::from(Token::Unlogged)), + // Temporary + "t" => tokens.push(TokenProperty::from(Token::Temporary)), + _ => panic!("Unknown ViewStmt {:#?}", n), + } + } }, "CreateStmt" => quote! { tokens.push(TokenProperty::from(Token::Create)); diff --git a/crates/parser/src/codegen.rs b/crates/parser/src/codegen.rs index dab36130..cb2bde3b 100644 --- a/crates/parser/src/codegen.rs +++ b/crates/parser/src/codegen.rs @@ -124,4 +124,20 @@ mod tests { ], ) } + + #[test] + fn test_create_view() { + test_get_node_properties( + "create or replace temporary view comedies as select * from films;", + SyntaxKind::ViewStmt, + vec![ + TokenProperty::from(SyntaxKind::Create), + TokenProperty::from(SyntaxKind::View), + TokenProperty::from(SyntaxKind::As), + TokenProperty::from(SyntaxKind::Or), + TokenProperty::from(SyntaxKind::Replace), + TokenProperty::from(SyntaxKind::Temporary), + ], + ) + } }