Parse a PG `tsquery` string into an `FtsQuery` tree. Empty input is rejected with `SqlError::Parse`.
(input: &str)
| 25 | /// |
| 26 | /// Empty input is rejected with `SqlError::Parse`. |
| 27 | pub fn parse_tsquery(input: &str) -> Result<FtsQuery> { |
| 28 | let input = input.trim(); |
| 29 | if input.is_empty() { |
| 30 | return Err(SqlError::Parse { |
| 31 | detail: "tsquery: empty query string".into(), |
| 32 | }); |
| 33 | } |
| 34 | let tokens = tokenize(input); |
| 35 | let mut pos = 0; |
| 36 | let query = parse_or(&tokens, &mut pos)?; |
| 37 | if pos < tokens.len() { |
| 38 | return Err(SqlError::Parse { |
| 39 | detail: format!( |
| 40 | "tsquery: unexpected token '{}' at position {pos}", |
| 41 | tokens[pos] |
| 42 | ), |
| 43 | }); |
| 44 | } |
| 45 | Ok(query) |
| 46 | } |
| 47 | |
| 48 | /// Build an `FtsQuery::Phrase` from whitespace-separated terms. |
| 49 | /// |