(tokens: &[String], pos: &mut usize)
| 101 | // ── Recursive-descent parser ────────────────────────────────────────────────── |
| 102 | |
| 103 | fn parse_or(tokens: &[String], pos: &mut usize) -> Result<FtsQuery> { |
| 104 | let mut left = parse_and(tokens, pos)?; |
| 105 | while *pos < tokens.len() && tokens[*pos] == "|" { |
| 106 | *pos += 1; |
| 107 | let right = parse_and(tokens, pos)?; |
| 108 | left = match left { |
| 109 | FtsQuery::Or(mut parts) => { |
| 110 | parts.push(right); |
| 111 | FtsQuery::Or(parts) |
| 112 | } |
| 113 | other => FtsQuery::Or(vec![other, right]), |
| 114 | }; |
| 115 | } |
| 116 | Ok(left) |
| 117 | } |
| 118 | |
| 119 | fn parse_and(tokens: &[String], pos: &mut usize) -> Result<FtsQuery> { |
| 120 | let mut left = parse_not(tokens, pos)?; |
no test coverage detected