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

Function parse_create_trigger

nodedb-sql/src/ddl_ast/parse/trigger.rs:70–118  ·  view source on GitHub ↗

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)

Source from the content-addressed store, hash-verified

68/// Extracts all fields as primitive types. The handler converts timing/events/
69/// granularity strings to their respective enums.
70fn 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)`.

Callers 2

try_parseFunction · 0.70
createFunction · 0.70

Calls 13

split_header_and_bodyFunction · 0.85
parse_timing_tokenFunction · 0.85
parse_event_tokensFunction · 0.85
parse_granularity_tokensFunction · 0.85
extract_when_conditionFunction · 0.85
parse_priority_tokenFunction · 0.85
parse_security_tokenFunction · 0.85
collectMethod · 0.80
firstMethod · 0.80
iterMethod · 0.45
lenMethod · 0.45

Tested by

no test coverage detected