Structural extraction for `CREATE [OR REPLACE] [SYNC|DEFERRED] TRIGGER`. Extracts all fields as primitive types. The handler converts timing/events/ granularity strings to their respective enums.
(upper: &str, trimmed: &str)
| 68 | /// Extracts all fields as primitive types. The handler converts timing/events/ |
| 69 | /// granularity strings to their respective enums. |
| 70 | fn parse_create_trigger(upper: &str, trimmed: &str) -> NodedbStatement { |
| 71 | let (or_replace, execution_mode, rest_original) = strip_create_trigger_prefix(upper, trimmed); |
| 72 | |
| 73 | let (header_original, header_upper, body_sql) = split_header_and_body(rest_original); |
| 74 | |
| 75 | let tokens_orig: Vec<&str> = header_original.split_whitespace().collect(); |
| 76 | let tokens_upper: Vec<String> = tokens_orig.iter().map(|t| t.to_uppercase()).collect(); |
| 77 | |
| 78 | let name = tokens_orig |
| 79 | .first() |
| 80 | .map(|s| s.to_lowercase()) |
| 81 | .unwrap_or_default(); |
| 82 | |
| 83 | let mut i = 1usize; |
| 84 | |
| 85 | let timing = parse_timing_token(&tokens_upper, &mut i); |
| 86 | let (events_insert, events_update, events_delete) = parse_event_tokens(&tokens_upper, &mut i); |
| 87 | |
| 88 | if i < tokens_upper.len() && tokens_upper[i] == "ON" { |
| 89 | i += 1; |
| 90 | } |
| 91 | let collection = tokens_orig |
| 92 | .get(i) |
| 93 | .map(|s| s.to_lowercase()) |
| 94 | .unwrap_or_default(); |
| 95 | i += 1; |
| 96 | |
| 97 | let granularity = parse_granularity_tokens(&tokens_upper, &mut i); |
| 98 | let when_condition = |
| 99 | extract_when_condition(&header_upper, &header_original, &tokens_upper, &mut i); |
| 100 | let priority = parse_priority_token(&tokens_orig, &tokens_upper, &mut i); |
| 101 | let security = parse_security_token(&tokens_upper, &mut i); |
| 102 | |
| 103 | NodedbStatement::Automation(AutomationStmt::CreateTrigger { |
| 104 | or_replace, |
| 105 | execution_mode, |
| 106 | name, |
| 107 | timing, |
| 108 | events_insert, |
| 109 | events_update, |
| 110 | events_delete, |
| 111 | collection, |
| 112 | granularity, |
| 113 | when_condition, |
| 114 | priority, |
| 115 | security, |
| 116 | body_sql, |
| 117 | }) |
| 118 | } |
| 119 | |
| 120 | /// Strip `CREATE [OR REPLACE] [SYNC|DEFERRED] TRIGGER ` prefix. |
| 121 | /// Returns `(or_replace, execution_mode, original_rest)`. |
no test coverage detected