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

Function try_parse_array_statement

nodedb-sql/src/parser/array_stmt/parse.rs:20–66  ·  view source on GitHub ↗

Top-level entry. Returns `Ok(None)` if the SQL doesn't start with an array statement keyword sequence.

(sql: &str)

Source from the content-addressed store, hash-verified

18/// Top-level entry. Returns `Ok(None)` if the SQL doesn't start with an
19/// array statement keyword sequence.
20pub fn try_parse_array_statement(sql: &str) -> Result<Option<ArrayStatement>> {
21 let trimmed = sql.trim_start();
22 let upper: String = trimmed
23 .chars()
24 .take(40)
25 .collect::<String>()
26 .to_ascii_uppercase();
27
28 if upper.starts_with("CREATE ARRAY ") || upper == "CREATE ARRAY" {
29 let toks = tokenize(trimmed)?;
30 let mut p = Parser::new(&toks);
31 p.expect_kw("CREATE")?;
32 p.expect_kw("ARRAY")?;
33 return Ok(Some(ArrayStatement::Create(p.parse_create()?)));
34 }
35 if upper.starts_with("DROP ARRAY ") || upper == "DROP ARRAY" {
36 let toks = tokenize(trimmed)?;
37 let mut p = Parser::new(&toks);
38 p.expect_kw("DROP")?;
39 p.expect_kw("ARRAY")?;
40 return Ok(Some(ArrayStatement::Drop(p.parse_drop()?)));
41 }
42 if upper.starts_with("INSERT INTO ARRAY ") {
43 let toks = tokenize(trimmed)?;
44 let mut p = Parser::new(&toks);
45 p.expect_kw("INSERT")?;
46 p.expect_kw("INTO")?;
47 p.expect_kw("ARRAY")?;
48 return Ok(Some(ArrayStatement::Insert(p.parse_insert()?)));
49 }
50 if upper.starts_with("DELETE FROM ARRAY ") {
51 let toks = tokenize(trimmed)?;
52 let mut p = Parser::new(&toks);
53 p.expect_kw("DELETE")?;
54 p.expect_kw("FROM")?;
55 p.expect_kw("ARRAY")?;
56 return Ok(Some(ArrayStatement::Delete(p.parse_delete()?)));
57 }
58 if upper.starts_with("ALTER ARRAY ") || upper == "ALTER ARRAY" {
59 let toks = tokenize(trimmed)?;
60 let mut p = Parser::new(&toks);
61 p.expect_kw("ALTER")?;
62 p.expect_kw("ARRAY")?;
63 return Ok(Some(ArrayStatement::Alter(p.parse_alter()?)));
64 }
65 Ok(None)
66}
67
68#[cfg(test)]
69mod tests {

Calls 8

expect_kwMethod · 0.80
parse_createMethod · 0.80
parse_dropMethod · 0.80
parse_insertMethod · 0.80
parse_deleteMethod · 0.80
parse_alterMethod · 0.80
tokenizeFunction · 0.70
takeMethod · 0.45