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

Method parse_alter

nodedb-sql/src/parser/array_stmt/parse_impl.rs:380–450  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

378 // ── ALTER ARRAY ────────────────────────────────────────────
379
380 pub(super) fn parse_alter(&mut self) -> Result<AlterArrayAst> {
381 let name = self.expect_ident()?;
382 self.expect_kw("SET")?;
383 self.expect(&Tok::LParen)?;
384 let mut set = Vec::new();
385 loop {
386 let key = self.expect_ident()?;
387 self.expect(&Tok::Eq)?;
388 let value = match self.peek() {
389 Some(Tok::Null) => {
390 self.i += 1;
391 None
392 }
393 Some(Tok::Int(_)) => {
394 let n = self.expect_int()?;
395 Some(n)
396 }
397 other => {
398 return Err(self.err(format!(
399 "SET {key}: expected integer or NULL, got {other:?}"
400 )));
401 }
402 };
403 let key_lower = key.to_ascii_lowercase();
404 match key_lower.as_str() {
405 "audit_retain_ms" => {
406 if let Some(n) = value
407 && n < 0
408 {
409 return Err(
410 self.err(format!("SET audit_retain_ms = {n}: must be >= 0 or NULL"))
411 );
412 }
413 }
414 "minimum_audit_retain_ms" => match value {
415 Some(n) if n < 0 => {
416 return Err(
417 self.err(format!("SET minimum_audit_retain_ms = {n}: must be >= 0"))
418 );
419 }
420 None => {
421 return Err(self.err(
422 "SET minimum_audit_retain_ms = NULL: floor cannot be NULL".to_string(),
423 ));
424 }
425 _ => {}
426 },
427 other => {
428 return Err(self.err(format!(
429 "SET: unknown key `{other}`; expected `audit_retain_ms` \
430 or `minimum_audit_retain_ms`"
431 )));
432 }
433 }
434 set.push((key_lower, value));
435 if !self.match_token(&Tok::Comma) {
436 break;
437 }

Callers 1

Calls 12

expect_identMethod · 0.80
expect_kwMethod · 0.80
expect_intMethod · 0.80
to_stringMethod · 0.80
match_tokenMethod · 0.80
at_endMethod · 0.80
expectMethod · 0.45
peekMethod · 0.45
errMethod · 0.45
as_strMethod · 0.45
pushMethod · 0.45
is_emptyMethod · 0.45

Tested by

no test coverage detected