MCPcopy Create free account
hub / github.com/MaterializeInc/materialize / parse_extract_expr

Method parse_extract_expr

src/sql-parser/src/parser.rs:1058–1076  ·  view source on GitHub ↗

Parse calls to extract(), which can take the form: - extract(field from 'interval')

(&mut self)

Source from the content-addressed store, hash-verified

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)?;

Callers 1

parse_prefixMethod · 0.80

Calls 10

FunctionClass · 0.85
expect_tokenMethod · 0.80
next_tokenMethod · 0.80
new_identifierMethod · 0.80
expectedMethod · 0.80
peek_prev_posMethod · 0.80
expect_keywordMethod · 0.80
parse_exprMethod · 0.80
NameClass · 0.50
into_stringMethod · 0.45

Tested by

no test coverage detected