MCPcopy Create free account
hub / github.com/erans/pgsqlite / parse_update_statement

Function parse_update_statement

src/validator/numeric_validator.rs:532–565  ·  view source on GitHub ↗

Parse UPDATE statement to extract column assignments

(sql: &str)

Source from the content-addressed store, hash-verified

530
531/// Parse UPDATE statement to extract column assignments
532fn parse_update_statement(sql: &str) -> Option<Vec<(String, String)>> {
533 // Simple regex-based parser for UPDATE statements
534 // This handles: UPDATE table SET col1 = val1, col2 = val2
535 static UPDATE_REGEX: Lazy<Regex> = Lazy::new(|| {
536 Regex::new(r"(?i)UPDATE\s+\w+\s+SET\s+(.+?)(?:\s+WHERE|$)").unwrap()
537 });
538
539 let caps = UPDATE_REGEX.captures(sql)?;
540 let assignments_str = caps.get(1)?.as_str();
541
542 let mut result = Vec::new();
543
544 // Split by comma but handle values that might contain commas
545 let assignments = split_assignments(assignments_str);
546
547 for assignment in assignments {
548 let parts: Vec<&str> = assignment.splitn(2, '=').collect();
549 if parts.len() == 2 {
550 let col_name = parts[0].trim().to_string();
551 let value_with_quotes = parts[1].trim().to_string();
552
553 // Skip validation for computed expressions or column references
554 if is_computed_expression(&value_with_quotes) {
555 continue; // Don't validate computed expressions
556 }
557
558 // Only remove quotes after validation check
559 let value = value_with_quotes.trim_matches('\'').to_string();
560 result.push((col_name, value));
561 }
562 }
563
564 Some(result)
565}
566
567
568/// Check if a value is a computed expression that shouldn't be validated

Calls 4

split_assignmentsFunction · 0.85
is_computed_expressionFunction · 0.85
getMethod · 0.45
lenMethod · 0.45