Top-level entry. Returns `Ok(None)` if the SQL doesn't start with an array statement keyword sequence.
(sql: &str)
| 18 | /// Top-level entry. Returns `Ok(None)` if the SQL doesn't start with an |
| 19 | /// array statement keyword sequence. |
| 20 | pub 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)] |
| 69 | mod tests { |