(
upper: &str,
parts: &[&str],
trimmed: &str,
)
| 7 | use crate::error::SqlError; |
| 8 | |
| 9 | pub(super) fn try_parse( |
| 10 | upper: &str, |
| 11 | parts: &[&str], |
| 12 | trimmed: &str, |
| 13 | ) -> Option<Result<NodedbStatement, SqlError>> { |
| 14 | (|| -> Result<Option<NodedbStatement>, SqlError> { |
| 15 | if upper.starts_with("CREATE RLS POLICY ") { |
| 16 | return Ok(Some(parse_create_rls_policy(upper, parts, trimmed))); |
| 17 | } |
| 18 | if upper.starts_with("DROP RLS POLICY ") { |
| 19 | let if_exists = upper.contains("IF EXISTS"); |
| 20 | let name = match extract_name_after_if_exists(parts, "POLICY") { |
| 21 | None => return Ok(None), |
| 22 | Some(r) => r?, |
| 23 | }; |
| 24 | let collection = extract_after_keyword(parts, "ON").unwrap_or_default(); |
| 25 | return Ok(Some(NodedbStatement::Policy(PolicyStmt::DropRlsPolicy { |
| 26 | name, |
| 27 | collection, |
| 28 | if_exists, |
| 29 | }))); |
| 30 | } |
| 31 | if upper.starts_with("SHOW RLS POLI") { |
| 32 | let collection = parts.get(3).map(|s| s.to_string()); |
| 33 | return Ok(Some(NodedbStatement::Policy(PolicyStmt::ShowRlsPolicies { |
| 34 | collection, |
| 35 | }))); |
| 36 | } |
| 37 | Ok(None) |
| 38 | })() |
| 39 | .transpose() |
| 40 | } |
| 41 | |
| 42 | /// `CREATE RLS POLICY <name> ON <collection> FOR <type> USING (<predicate>) |
| 43 | /// [RESTRICTIVE] [TENANT <id>] [ON DENY ...]` |
no test coverage detected