Parse calls to extract(), which can take the form: - extract(field from 'interval')
(&mut self)
| 1056 | // Parse calls to extract(), which can take the form: |
| 1057 | // - extract(field from 'interval') |
| 1058 | fn parse_extract_expr(&mut self) -> Result<Expr<Raw>, ParserError> { |
| 1059 | self.expect_token(&Token::LParen)?; |
| 1060 | let field = match self.next_token() { |
| 1061 | Some(Token::Keyword(kw)) => Ident::from(kw).into_string(), |
| 1062 | Some(Token::Ident(id)) => self.new_identifier(id)?.into_string(), |
| 1063 | Some(Token::String(s)) => s, |
| 1064 | t => self.expected(self.peek_prev_pos(), "extract field token", t)?, |
| 1065 | }; |
| 1066 | self.expect_keyword(FROM)?; |
| 1067 | let expr = self.parse_expr()?; |
| 1068 | self.expect_token(&Token::RParen)?; |
| 1069 | Ok(Expr::Function(Function { |
| 1070 | name: RawItemName::Name(UnresolvedItemName::unqualified(ident!("extract"))), |
| 1071 | args: FunctionArgs::args(vec![Expr::Value(Value::String(field)), expr]), |
| 1072 | filter: None, |
| 1073 | over: None, |
| 1074 | distinct: false, |
| 1075 | })) |
| 1076 | } |
| 1077 | |
| 1078 | fn parse_row_expr(&mut self) -> Result<Expr<Raw>, ParserError> { |
| 1079 | self.expect_token(&Token::LParen)?; |
no test coverage detected