style: format the whole tree with cargo fmt (stock defaults, #35)
One-time, mechanical reformat — no functional changes. The tree was not rustfmt-clean (~1800 hunks across ~100 files); this brings it to stock `cargo fmt` defaults so a `cargo fmt --check` CI gate can follow. Behaviour-preserving: 2509 pass / 0 fail / 1 ignored (unchanged baseline), clippy clean. A .git-blame-ignore-revs entry follows so `git blame` skips this commit.
This commit is contained in:
+110
-38
@@ -14,12 +14,12 @@
|
||||
//! advanced effective mode (ADR-0037).
|
||||
|
||||
use crate::app::EffectiveMode;
|
||||
use crate::dsl::ReferentialAction;
|
||||
use crate::dsl::types::Type;
|
||||
use crate::dsl::Command;
|
||||
use crate::dsl::ReferentialAction;
|
||||
use crate::dsl::command::{
|
||||
ColumnSpec, CompareOp, Constraint, ConstraintKind, Expr, Operand, Predicate, RowFilter,
|
||||
};
|
||||
use crate::dsl::types::Type;
|
||||
use crate::dsl::value::Value;
|
||||
|
||||
/// The dimmed `Executing SQL:` prefix on a teaching-echo line
|
||||
@@ -79,7 +79,12 @@ pub fn echo_for_query(
|
||||
name,
|
||||
filter,
|
||||
limit,
|
||||
} => Some(vec![render_show_data(name, filter.as_ref(), *limit, primary_key)]),
|
||||
} => Some(vec![render_show_data(
|
||||
name,
|
||||
filter.as_ref(),
|
||||
*limit,
|
||||
primary_key,
|
||||
)]),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
@@ -150,12 +155,12 @@ pub fn command_to_sql(command: &Command) -> Option<String> {
|
||||
column,
|
||||
kind,
|
||||
} => match kind {
|
||||
ConstraintKind::NotNull => {
|
||||
Some(format!("ALTER TABLE {table} ALTER COLUMN {column} DROP NOT NULL"))
|
||||
}
|
||||
ConstraintKind::Default => {
|
||||
Some(format!("ALTER TABLE {table} ALTER COLUMN {column} DROP DEFAULT"))
|
||||
}
|
||||
ConstraintKind::NotNull => Some(format!(
|
||||
"ALTER TABLE {table} ALTER COLUMN {column} DROP NOT NULL"
|
||||
)),
|
||||
ConstraintKind::Default => Some(format!(
|
||||
"ALTER TABLE {table} ALTER COLUMN {column} DROP DEFAULT"
|
||||
)),
|
||||
// A column-level UNIQUE / CHECK is anonymous in our model —
|
||||
// no portable name to DROP CONSTRAINT by, so no echo (Bucket C,
|
||||
// ADR-0035 Amendment 2 residual gap / ADR-0038 §7).
|
||||
@@ -169,7 +174,10 @@ pub fn command_to_sql(command: &Command) -> Option<String> {
|
||||
table,
|
||||
assignments,
|
||||
filter: RowFilter::AllRows,
|
||||
} => Some(format!("UPDATE {table} SET {}", render_assignments(assignments))),
|
||||
} => Some(format!(
|
||||
"UPDATE {table} SET {}",
|
||||
render_assignments(assignments)
|
||||
)),
|
||||
Command::Delete {
|
||||
table,
|
||||
filter: RowFilter::AllRows,
|
||||
@@ -199,7 +207,13 @@ fn render_create_table(name: &str, columns: &[ColumnSpec], primary_key: &[String
|
||||
// The same column-constraint suffix `add column` emits (ADR-0029):
|
||||
// simple-mode `create table` can carry `default` / `check` too, so
|
||||
// the echo must render them or it is not equivalent (§1 contract).
|
||||
append_constraints(&mut s, c.not_null, c.unique, c.default.as_ref(), c.check.as_ref());
|
||||
append_constraints(
|
||||
&mut s,
|
||||
c.not_null,
|
||||
c.unique,
|
||||
c.default.as_ref(),
|
||||
c.check.as_ref(),
|
||||
);
|
||||
s
|
||||
})
|
||||
.collect();
|
||||
@@ -299,8 +313,10 @@ pub(crate) fn render_create_m2n(
|
||||
primary_key: &[String],
|
||||
foreign_keys: &[(Vec<String>, String, Vec<String>)],
|
||||
) -> String {
|
||||
let mut parts: Vec<String> =
|
||||
columns.iter().map(|(n, ty)| format!("{n} {}", ty.keyword())).collect();
|
||||
let mut parts: Vec<String> = columns
|
||||
.iter()
|
||||
.map(|(n, ty)| format!("{n} {}", ty.keyword()))
|
||||
.collect();
|
||||
parts.push(format!("PRIMARY KEY ({})", primary_key.join(", ")));
|
||||
for (child_columns, parent_table, parent_columns) in foreign_keys {
|
||||
parts.push(format!(
|
||||
@@ -368,7 +384,12 @@ pub(crate) fn render_add_relationship_create_fk(
|
||||
) -> Vec<String> {
|
||||
let mut lines: Vec<String> = new_columns
|
||||
.iter()
|
||||
.map(|(col, ty)| format!("ALTER TABLE {child_table} ADD COLUMN {col} {}", ty.keyword()))
|
||||
.map(|(col, ty)| {
|
||||
format!(
|
||||
"ALTER TABLE {child_table} ADD COLUMN {col} {}",
|
||||
ty.keyword()
|
||||
)
|
||||
})
|
||||
.collect();
|
||||
lines.push(render_add_relationship(
|
||||
name,
|
||||
@@ -461,7 +482,11 @@ fn predicate_to_sql(predicate: &Predicate) -> String {
|
||||
negated,
|
||||
} => {
|
||||
let not = if *negated { "NOT " } else { "" };
|
||||
format!("{} {not}LIKE {}", operand_to_sql(target), operand_to_sql(pattern))
|
||||
format!(
|
||||
"{} {not}LIKE {}",
|
||||
operand_to_sql(target),
|
||||
operand_to_sql(pattern)
|
||||
)
|
||||
}
|
||||
Predicate::Between {
|
||||
target,
|
||||
@@ -484,7 +509,11 @@ fn predicate_to_sql(predicate: &Predicate) -> String {
|
||||
} => {
|
||||
let not = if *negated { "NOT " } else { "" };
|
||||
let rendered: Vec<String> = items.iter().map(operand_to_sql).collect();
|
||||
format!("{} {not}IN ({})", operand_to_sql(target), rendered.join(", "))
|
||||
format!(
|
||||
"{} {not}IN ({})",
|
||||
operand_to_sql(target),
|
||||
rendered.join(", ")
|
||||
)
|
||||
}
|
||||
Predicate::IsNull { target, negated } => {
|
||||
let not = if *negated { "NOT " } else { "" };
|
||||
@@ -562,7 +591,10 @@ mod tests {
|
||||
fn create_table_compound_pk_renders_table_level() {
|
||||
let cmd = create_table(
|
||||
"T",
|
||||
vec![ColumnSpec::new("a", Type::Int), ColumnSpec::new("b", Type::Int)],
|
||||
vec![
|
||||
ColumnSpec::new("a", Type::Int),
|
||||
ColumnSpec::new("b", Type::Int),
|
||||
],
|
||||
&["a", "b"],
|
||||
);
|
||||
assert_eq!(
|
||||
@@ -594,7 +626,11 @@ mod tests {
|
||||
default: Some(Value::Text("A".to_string())),
|
||||
..ColumnSpec::new("grade", Type::Text)
|
||||
};
|
||||
let cmd = create_table("T", vec![ColumnSpec::new("id", Type::Serial), age, grade], &["id"]);
|
||||
let cmd = create_table(
|
||||
"T",
|
||||
vec![ColumnSpec::new("id", Type::Serial), age, grade],
|
||||
&["id"],
|
||||
);
|
||||
let sql = command_to_sql(&cmd).expect("echo");
|
||||
assert_eq!(
|
||||
sql,
|
||||
@@ -625,11 +661,11 @@ mod tests {
|
||||
check: None,
|
||||
};
|
||||
let sql = command_to_sql(&cmd).expect("echo");
|
||||
assert_eq!(sql, "ALTER TABLE T ADD COLUMN note text NOT NULL DEFAULT 'n/a'");
|
||||
assert!(matches!(
|
||||
reparse(&sql),
|
||||
Ok(Command::SqlAlterTable { .. })
|
||||
));
|
||||
assert_eq!(
|
||||
sql,
|
||||
"ALTER TABLE T ADD COLUMN note text NOT NULL DEFAULT 'n/a'"
|
||||
);
|
||||
assert!(matches!(reparse(&sql), Ok(Command::SqlAlterTable { .. })));
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -657,7 +693,10 @@ mod tests {
|
||||
})),
|
||||
};
|
||||
let sql = command_to_sql(&cmd).expect("echo");
|
||||
assert_eq!(sql, "ALTER TABLE T ADD COLUMN score int UNIQUE CHECK (score >= 0)");
|
||||
assert_eq!(
|
||||
sql,
|
||||
"ALTER TABLE T ADD COLUMN score int UNIQUE CHECK (score >= 0)"
|
||||
);
|
||||
assert!(matches!(reparse(&sql), Ok(Command::SqlAlterTable { .. })));
|
||||
}
|
||||
|
||||
@@ -1031,7 +1070,10 @@ mod tests {
|
||||
let lines = render_drop_column_cascade(
|
||||
"Orders",
|
||||
"CustId",
|
||||
&["Orders_CustId_idx".to_string(), "Orders_CustId_Day_idx".to_string()],
|
||||
&[
|
||||
"Orders_CustId_idx".to_string(),
|
||||
"Orders_CustId_Day_idx".to_string(),
|
||||
],
|
||||
);
|
||||
assert_eq!(
|
||||
lines.as_slice(),
|
||||
@@ -1043,9 +1085,18 @@ mod tests {
|
||||
);
|
||||
// Each line is itself runnable advanced-mode SQL (the §1 contract
|
||||
// holds per line for category 2).
|
||||
assert!(matches!(reparse(&lines[0]), Ok(Command::SqlDropIndex { .. })));
|
||||
assert!(matches!(reparse(&lines[1]), Ok(Command::SqlDropIndex { .. })));
|
||||
assert!(matches!(reparse(&lines[2]), Ok(Command::SqlAlterTable { .. })));
|
||||
assert!(matches!(
|
||||
reparse(&lines[0]),
|
||||
Ok(Command::SqlDropIndex { .. })
|
||||
));
|
||||
assert!(matches!(
|
||||
reparse(&lines[1]),
|
||||
Ok(Command::SqlDropIndex { .. })
|
||||
));
|
||||
assert!(matches!(
|
||||
reparse(&lines[2]),
|
||||
Ok(Command::SqlAlterTable { .. })
|
||||
));
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -1054,7 +1105,10 @@ mod tests {
|
||||
// plain `DROP COLUMN` — still semantically equivalent.
|
||||
let lines = render_drop_column_cascade("T", "c", &[]);
|
||||
assert_eq!(lines.as_slice(), &["ALTER TABLE T DROP COLUMN c"]);
|
||||
assert!(matches!(reparse(&lines[0]), Ok(Command::SqlAlterTable { .. })));
|
||||
assert!(matches!(
|
||||
reparse(&lines[0]),
|
||||
Ok(Command::SqlAlterTable { .. })
|
||||
));
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -1078,8 +1132,14 @@ mod tests {
|
||||
"ALTER TABLE Orders ADD CONSTRAINT Customers_id_to_Orders_CustId FOREIGN KEY (CustId) REFERENCES Customers (id) ON DELETE CASCADE",
|
||||
]
|
||||
);
|
||||
assert!(matches!(reparse(&lines[0]), Ok(Command::SqlAlterTable { .. })));
|
||||
assert!(matches!(reparse(&lines[1]), Ok(Command::SqlAlterTable { .. })));
|
||||
assert!(matches!(
|
||||
reparse(&lines[0]),
|
||||
Ok(Command::SqlAlterTable { .. })
|
||||
));
|
||||
assert!(matches!(
|
||||
reparse(&lines[1]),
|
||||
Ok(Command::SqlAlterTable { .. })
|
||||
));
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -1116,8 +1176,16 @@ mod tests {
|
||||
],
|
||||
&["Students_id".to_string(), "Courses_id".to_string()],
|
||||
&[
|
||||
(vec!["Students_id".to_string()], "Students".to_string(), vec!["id".to_string()]),
|
||||
(vec!["Courses_id".to_string()], "Courses".to_string(), vec!["id".to_string()]),
|
||||
(
|
||||
vec!["Students_id".to_string()],
|
||||
"Students".to_string(),
|
||||
vec!["id".to_string()],
|
||||
),
|
||||
(
|
||||
vec!["Courses_id".to_string()],
|
||||
"Courses".to_string(),
|
||||
vec!["id".to_string()],
|
||||
),
|
||||
],
|
||||
);
|
||||
assert_eq!(
|
||||
@@ -1172,8 +1240,14 @@ mod tests {
|
||||
#[test]
|
||||
fn value_literal_renders_null_uppercase_and_quotes_text() {
|
||||
assert_eq!(value_to_sql_literal(&Value::Null), "NULL");
|
||||
assert_eq!(value_to_sql_literal(&Value::Text("O'Hara".to_string())), "'O''Hara'");
|
||||
assert_eq!(value_to_sql_literal(&Value::Number("3.14".to_string())), "3.14");
|
||||
assert_eq!(
|
||||
value_to_sql_literal(&Value::Text("O'Hara".to_string())),
|
||||
"'O''Hara'"
|
||||
);
|
||||
assert_eq!(
|
||||
value_to_sql_literal(&Value::Number("3.14".to_string())),
|
||||
"3.14"
|
||||
);
|
||||
assert_eq!(value_to_sql_literal(&Value::Bool(false)), "false");
|
||||
}
|
||||
|
||||
@@ -1258,9 +1332,7 @@ mod tests {
|
||||
"Command::App({app:?}) is Bucket C — no echo"
|
||||
);
|
||||
// Also confirm echo_for gates the same in advanced mode.
|
||||
assert!(
|
||||
echo_for(&Command::App(app), EffectiveMode::AdvancedPersistent).is_none(),
|
||||
);
|
||||
assert!(echo_for(&Command::App(app), EffectiveMode::AdvancedPersistent).is_none(),);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user