diff --git a/crates/codegen/src/get_node_properties.rs b/crates/codegen/src/get_node_properties.rs index 7e2bf6ea..55792a59 100644 --- a/crates/codegen/src/get_node_properties.rs +++ b/crates/codegen/src/get_node_properties.rs @@ -863,6 +863,37 @@ fn custom_handlers(node: &Node) -> TokenStream { tokens.push(TokenProperty::from(Token::Function)); } }, + "TypeName" => quote! { + let names = n.names + .iter() + .filter_map(|n| if let Some(NodeEnum::String(s)) = &n.node { Some(s.sval.clone()) } else { None }) + .collect::>(); + + if names.len() == 2 && names[0] == "pg_catalog" { + match names[1].as_str() { + "interval" => { + tokens.push(TokenProperty::from(Token::To)); // + tokens.push(TokenProperty::from(Token::SecondP)); // + }, + "timestamptz" => { + tokens.push(TokenProperty::from(Token::With)); + tokens.push(TokenProperty::from(Token::Time)); + tokens.push(TokenProperty::from(Token::Zone)); + } + "time" => { + tokens.push(TokenProperty::from(Token::Time)); + }, + "timetz" => { + tokens.push(TokenProperty::from(Token::Time)); + tokens.push(TokenProperty::from(Token::With)); + tokens.push(TokenProperty::from(Token::Time)); + tokens.push(TokenProperty::from(Token::Zone)); + tokens.push(TokenProperty::from(Token::Not)); // + } + _ => {} + } + } + }, _ => quote! {}, } }