Skip to content

Commit ab3c4ea

Browse files
authored
Merge pull request #110 from cvng/feat/interval-fields
2 parents 255ffb3 + 99dd96d commit ab3c4ea

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

crates/codegen/src/get_node_properties.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -883,6 +883,9 @@ fn custom_handlers(node: &Node) -> TokenStream {
883883
},
884884
"interval" => {
885885
// Adapted from https://github.com/postgres/postgres/blob/REL_15_STABLE/src/backend/utils/adt/timestamp.c#L1103
886+
const MONTH: i32 = 1;
887+
const YEAR: i32 = 2;
888+
const DAY: i32 = 3;
886889
const HOUR: i32 = 10;
887890
const MINUTE: i32 = 11;
888891
const SECOND: i32 = 12;
@@ -894,10 +897,41 @@ fn custom_handlers(node: &Node) -> TokenStream {
894897

895898
if let Some(fields) = fields {
896899
match fields.clone() {
900+
// YEAR TO MONTH
901+
i if i == 1 << YEAR | 1 << MONTH => {
902+
tokens.push(TokenProperty::from(Token::To));
903+
tokens.push(TokenProperty::from(Token::MonthP));
904+
},
905+
// DAY TO HOUR
906+
i if i == 1 << DAY | 1 << HOUR => {
907+
tokens.push(TokenProperty::from(Token::To));
908+
tokens.push(TokenProperty::from(Token::HourP));
909+
},
910+
// DAY TO MINUTE
911+
i if i == 1 << DAY | 1 << HOUR | 1 << MINUTE => {
912+
tokens.push(TokenProperty::from(Token::To));
913+
tokens.push(TokenProperty::from(Token::MinuteP));
914+
},
915+
// DAY TO SECOND
916+
i if i == 1 << DAY | 1 << HOUR | 1 << MINUTE | 1 << SECOND => {
917+
tokens.push(TokenProperty::from(Token::To));
918+
tokens.push(TokenProperty::from(Token::SecondP));
919+
},
920+
// HOUR TO MINUTE
921+
i if i == 1 << HOUR | 1 << MINUTE => {
922+
tokens.push(TokenProperty::from(Token::To));
923+
tokens.push(TokenProperty::from(Token::MinuteP));
924+
},
925+
// HOUR TO SECOND
897926
i if i == 1 << HOUR | 1 << MINUTE | 1 << SECOND => {
898927
tokens.push(TokenProperty::from(Token::To));
899928
tokens.push(TokenProperty::from(Token::SecondP));
900929
},
930+
// MINUTE TO SECOND
931+
i if i == 1 << MINUTE | 1 << SECOND => {
932+
tokens.push(TokenProperty::from(Token::To));
933+
tokens.push(TokenProperty::from(Token::SecondP));
934+
},
901935
_ => panic!("Unknown Interval fields {:#?}", fields),
902936
}
903937
}

0 commit comments

Comments
 (0)