Skip to content

Commit 841a596

Browse files
committed
move parsing to dedicated function
1 parent 1e3bea0 commit 841a596

1 file changed

Lines changed: 85 additions & 81 deletions

File tree

src/parser/mod.rs

Lines changed: 85 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -10321,87 +10321,7 @@ impl<'a> Parser<'a> {
1032110321
None
1032210322
};
1032310323

10324-
let mut pipe_operators = Vec::new();
10325-
10326-
while self.consume_token(&Token::VerticalBarRightAngleBracket) {
10327-
let kw = self.expect_one_of_keywords(&[
10328-
Keyword::SELECT,
10329-
Keyword::EXTEND,
10330-
Keyword::SET,
10331-
Keyword::DROP,
10332-
Keyword::AS,
10333-
Keyword::WHERE,
10334-
Keyword::LIMIT,
10335-
Keyword::AGGREGATE,
10336-
Keyword::ORDER,
10337-
])?;
10338-
match kw {
10339-
Keyword::SELECT => {
10340-
let exprs = self.parse_comma_separated(Parser::parse_select_item)?;
10341-
pipe_operators.push(PipeOperator::Select { exprs })
10342-
}
10343-
Keyword::EXTEND => {
10344-
let exprs = self.parse_comma_separated(Parser::parse_select_item)?;
10345-
pipe_operators.push(PipeOperator::Extend { exprs })
10346-
}
10347-
Keyword::SET => {
10348-
let assignments = self.parse_comma_separated(Parser::parse_assignment)?;
10349-
pipe_operators.push(PipeOperator::Set { assignments })
10350-
}
10351-
Keyword::DROP => {
10352-
let columns = self.parse_identifiers()?;
10353-
pipe_operators.push(PipeOperator::Drop { columns })
10354-
}
10355-
Keyword::AS => {
10356-
let alias = self.parse_identifier()?;
10357-
pipe_operators.push(PipeOperator::As { alias })
10358-
}
10359-
Keyword::WHERE => {
10360-
let expr = self.parse_expr()?;
10361-
pipe_operators.push(PipeOperator::Where { expr })
10362-
}
10363-
Keyword::LIMIT => {
10364-
let expr = self.parse_expr()?;
10365-
let offset = if self.parse_keyword(Keyword::OFFSET) {
10366-
Some(self.parse_expr()?)
10367-
} else {
10368-
None
10369-
};
10370-
pipe_operators.push(PipeOperator::Limit { expr, offset })
10371-
}
10372-
Keyword::AGGREGATE => {
10373-
let full_table_exprs = self.parse_comma_separated0(
10374-
|parser| {
10375-
let expr = parser.parse_expr()?;
10376-
let alias = parser.maybe_parse_select_item_alias()?;
10377-
Ok(ExprWithAlias { expr, alias })
10378-
},
10379-
Token::make_keyword(keywords::GROUP),
10380-
)?;
10381-
10382-
let group_by_exprs = if self.parse_keywords(&[Keyword::GROUP, Keyword::BY])
10383-
{
10384-
self.parse_comma_separated(|parser| {
10385-
let expr = parser.parse_expr()?;
10386-
let alias = parser.maybe_parse_select_item_alias()?;
10387-
Ok(ExprWithAlias { expr, alias })
10388-
})?
10389-
} else {
10390-
vec![]
10391-
};
10392-
pipe_operators.push(PipeOperator::Aggregate {
10393-
full_table_exprs,
10394-
group_by_exprs,
10395-
})
10396-
}
10397-
Keyword::ORDER => {
10398-
self.expect_one_of_keywords(&[Keyword::BY])?;
10399-
let exprs = self.parse_comma_separated(Parser::parse_order_by_expr)?;
10400-
pipe_operators.push(PipeOperator::OrderBy { exprs })
10401-
}
10402-
_ => {}
10403-
}
10404-
}
10324+
let pipe_operators = self.parse_pipe_operators()?;
1040510325

1040610326
Ok(Query {
1040710327
with,
@@ -10421,6 +10341,90 @@ impl<'a> Parser<'a> {
1042110341
}
1042210342
}
1042310343

10344+
fn parse_pipe_operators(&mut self) -> Result<Vec<PipeOperator>, ParserError> {
10345+
let mut pipe_operators = Vec::new();
10346+
10347+
while self.consume_token(&Token::VerticalBarRightAngleBracket) {
10348+
let kw = self.expect_one_of_keywords(&[
10349+
Keyword::SELECT,
10350+
Keyword::EXTEND,
10351+
Keyword::SET,
10352+
Keyword::DROP,
10353+
Keyword::AS,
10354+
Keyword::WHERE,
10355+
Keyword::LIMIT,
10356+
Keyword::AGGREGATE,
10357+
Keyword::ORDER,
10358+
])?;
10359+
match kw {
10360+
Keyword::SELECT => {
10361+
let exprs = self.parse_comma_separated(Parser::parse_select_item)?;
10362+
pipe_operators.push(PipeOperator::Select { exprs })
10363+
}
10364+
Keyword::EXTEND => {
10365+
let exprs = self.parse_comma_separated(Parser::parse_select_item)?;
10366+
pipe_operators.push(PipeOperator::Extend { exprs })
10367+
}
10368+
Keyword::SET => {
10369+
let assignments = self.parse_comma_separated(Parser::parse_assignment)?;
10370+
pipe_operators.push(PipeOperator::Set { assignments })
10371+
}
10372+
Keyword::DROP => {
10373+
let columns = self.parse_identifiers()?;
10374+
pipe_operators.push(PipeOperator::Drop { columns })
10375+
}
10376+
Keyword::AS => {
10377+
let alias = self.parse_identifier()?;
10378+
pipe_operators.push(PipeOperator::As { alias })
10379+
}
10380+
Keyword::WHERE => {
10381+
let expr = self.parse_expr()?;
10382+
pipe_operators.push(PipeOperator::Where { expr })
10383+
}
10384+
Keyword::LIMIT => {
10385+
let expr = self.parse_expr()?;
10386+
let offset = if self.parse_keyword(Keyword::OFFSET) {
10387+
Some(self.parse_expr()?)
10388+
} else {
10389+
None
10390+
};
10391+
pipe_operators.push(PipeOperator::Limit { expr, offset })
10392+
}
10393+
Keyword::AGGREGATE => {
10394+
let full_table_exprs = self.parse_comma_separated0(
10395+
|parser| {
10396+
let expr = parser.parse_expr()?;
10397+
let alias = parser.maybe_parse_select_item_alias()?;
10398+
Ok(ExprWithAlias { expr, alias })
10399+
},
10400+
Token::make_keyword(keywords::GROUP),
10401+
)?;
10402+
10403+
let group_by_exprs = if self.parse_keywords(&[Keyword::GROUP, Keyword::BY]) {
10404+
self.parse_comma_separated(|parser| {
10405+
let expr = parser.parse_expr()?;
10406+
let alias = parser.maybe_parse_select_item_alias()?;
10407+
Ok(ExprWithAlias { expr, alias })
10408+
})?
10409+
} else {
10410+
vec![]
10411+
};
10412+
pipe_operators.push(PipeOperator::Aggregate {
10413+
full_table_exprs,
10414+
group_by_exprs,
10415+
})
10416+
}
10417+
Keyword::ORDER => {
10418+
self.expect_one_of_keywords(&[Keyword::BY])?;
10419+
let exprs = self.parse_comma_separated(Parser::parse_order_by_expr)?;
10420+
pipe_operators.push(PipeOperator::OrderBy { exprs })
10421+
}
10422+
_ => {}
10423+
}
10424+
}
10425+
Ok(pipe_operators)
10426+
}
10427+
1042410428
fn parse_settings(&mut self) -> Result<Option<Vec<Setting>>, ParserError> {
1042510429
let settings = if dialect_of!(self is ClickHouseDialect|GenericDialect)
1042610430
&& self.parse_keyword(Keyword::SETTINGS)

0 commit comments

Comments
 (0)