@@ -8040,20 +8040,7 @@ impl<'a> Parser<'a> {
80408040 None
80418041 };
80428042
8043- // Optional purpose
8044- let purpose = if self.parse_keyword(Keyword::FOR) {
8045- if self.parse_keyword(Keyword::SEARCH) {
8046- Some(OperatorPurpose::ForSearch)
8047- } else if self.parse_keywords(&[Keyword::ORDER, Keyword::BY]) {
8048- let sort_family = self.parse_object_name(false)?;
8049- Some(OperatorPurpose::ForOrderBy { sort_family })
8050- } else {
8051- return self
8052- .expected_ref("SEARCH or ORDER BY after FOR", self.peek_token_ref());
8053- }
8054- } else {
8055- None
8056- };
8043+ let purpose = self.parse_operator_purpose()?;
80578044
80588045 items.push(OperatorClassItem::Operator {
80598046 strategy_number,
@@ -12298,6 +12285,21 @@ impl<'a> Parser<'a> {
1229812285 })
1229912286 }
1230012287
12288+ fn parse_operator_purpose(&mut self) -> Result<Option<OperatorPurpose>, ParserError> {
12289+ if !self.parse_keyword(Keyword::FOR) {
12290+ return Ok(None);
12291+ }
12292+
12293+ if self.parse_keyword(Keyword::SEARCH) {
12294+ Ok(Some(OperatorPurpose::ForSearch))
12295+ } else if self.parse_keywords(&[Keyword::ORDER, Keyword::BY]) {
12296+ let sort_family = self.parse_object_name(false)?;
12297+ Ok(Some(OperatorPurpose::ForOrderBy { sort_family }))
12298+ } else {
12299+ self.expected_ref("SEARCH or ORDER BY after FOR", self.peek_token_ref())
12300+ }
12301+ }
12302+
1230112303 /// Parse an operator item for ALTER OPERATOR FAMILY ADD operations
1230212304 fn parse_operator_family_add_operator(&mut self) -> Result<OperatorFamilyItem, ParserError> {
1230312305 let strategy_number = self.parse_literal_uint()?;
@@ -12308,19 +12310,7 @@ impl<'a> Parser<'a> {
1230812310 let op_types = self.parse_comma_separated(Parser::parse_data_type)?;
1230912311 self.expect_token(&Token::RParen)?;
1231012312
12311- // Optional purpose
12312- let purpose = if self.parse_keyword(Keyword::FOR) {
12313- if self.parse_keyword(Keyword::SEARCH) {
12314- Some(OperatorPurpose::ForSearch)
12315- } else if self.parse_keywords(&[Keyword::ORDER, Keyword::BY]) {
12316- let sort_family = self.parse_object_name(false)?;
12317- Some(OperatorPurpose::ForOrderBy { sort_family })
12318- } else {
12319- return self.expected_ref("SEARCH or ORDER BY after FOR", self.peek_token_ref());
12320- }
12321- } else {
12322- None
12323- };
12313+ let purpose = self.parse_operator_purpose()?;
1232412314
1232512315 Ok(OperatorFamilyItem::Operator {
1232612316 strategy_number,
0 commit comments