MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / parse_for

Function parse_for

nodedb/src/control/planner/procedural/parser/statements.rs:176–200  ·  view source on GitHub ↗

`FOR var IN [REVERSE] start..end LOOP ... END LOOP;`

(tokens: &[Token], pos: &mut usize)

Source from the content-addressed store, hash-verified

174
175/// `FOR var IN [REVERSE] start..end LOOP ... END LOOP;`
176fn parse_for(tokens: &[Token], pos: &mut usize) -> Result<Statement, ProceduralError> {
177 *pos += 1;
178 let var = expect_ident(tokens, pos)?;
179 expect_token(tokens, pos, &Token::In)?;
180 let reverse = if matches!(tokens.get(*pos), Some(Token::Reverse)) {
181 *pos += 1;
182 true
183 } else {
184 false
185 };
186 let start = collect_sql_until(tokens, pos, &[Token::DotDot])?;
187 expect_token(tokens, pos, &Token::DotDot)?;
188 let end = collect_sql_until(tokens, pos, &[Token::Loop])?;
189 expect_token(tokens, pos, &Token::Loop)?;
190 let body = super::parse_statements(tokens, pos)?;
191 expect_token(tokens, pos, &Token::EndLoop)?;
192 skip_if(tokens, pos, &Token::Semicolon);
193 Ok(Statement::For {
194 var,
195 start,
196 end,
197 reverse,
198 body,
199 })
200}
201
202/// `LOOP ... END LOOP;`
203fn parse_loop(tokens: &[Token], pos: &mut usize) -> Result<Statement, ProceduralError> {

Callers 1

parse_statementFunction · 0.85

Calls 5

expect_identFunction · 0.85
collect_sql_untilFunction · 0.85
parse_statementsFunction · 0.85
skip_ifFunction · 0.85
expect_tokenFunction · 0.70

Tested by

no test coverage detected