Parse calls to normalize(), which can take the form: - normalize('string') - normalize('string', NFC) - normalize('string', NFD) - normalize('string', NFKC) - normalize('string', NFKD)
(&mut self)
| 1163 | /// - normalize('string', NFKC) |
| 1164 | /// - normalize('string', NFKD) |
| 1165 | fn parse_normalize_expr(&mut self) -> Result<Expr<Raw>, ParserError> { |
| 1166 | self.expect_token(&Token::LParen)?; |
| 1167 | let expr = self.parse_expr()?; |
| 1168 | |
| 1169 | let args = if self.consume_token(&Token::Comma) { |
| 1170 | let form = self |
| 1171 | .expect_one_of_keywords(&[NFC, NFD, NFKC, NFKD])? |
| 1172 | .as_str(); |
| 1173 | vec![expr, Expr::Value(Value::String(form.to_owned()))] |
| 1174 | } else { |
| 1175 | vec![expr, Expr::Value(Value::String("NFC".to_owned()))] |
| 1176 | }; |
| 1177 | |
| 1178 | self.expect_token(&Token::RParen)?; |
| 1179 | Ok(Expr::Function(Function { |
| 1180 | name: RawItemName::Name(UnresolvedItemName::unqualified(ident!("normalize"))), |
| 1181 | args: FunctionArgs::args(args), |
| 1182 | filter: None, |
| 1183 | over: None, |
| 1184 | distinct: false, |
| 1185 | })) |
| 1186 | } |
| 1187 | |
| 1188 | /// Parse an INTERVAL literal. |
| 1189 | /// |
no test coverage detected