Skip to content

Commit c5f483e

Browse files
fix: reject unsupported options in MySQL structured config
MySQL's OptsBuilder does not support arbitrary key-value connection parameters. Return an error listing the unsupported keys instead of silently ignoring them. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent be83435 commit c5f483e

1 file changed

Lines changed: 27 additions & 0 deletions

File tree

src/seed/db.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1603,6 +1603,12 @@ fn connect_structured(
16031603
}
16041604
#[cfg(feature = "mysql")]
16051605
"mysql" => {
1606+
if !config.options.is_empty() {
1607+
return Err(format!(
1608+
"structured database config does not support 'options' for mysql (unsupported keys: {})",
1609+
config.options.keys().cloned().collect::<Vec<_>>().join(", ")
1610+
));
1611+
}
16061612
let port = config.port.unwrap_or(3306);
16071613
let mut opts = mysql::OptsBuilder::default()
16081614
.ip_or_hostname(Some(&config.host))
@@ -1813,6 +1819,27 @@ mod tests {
18131819
assert!(err.contains("not supported for sqlite"));
18141820
}
18151821

1822+
#[cfg(feature = "mysql")]
1823+
#[test]
1824+
fn test_connect_structured_mysql_rejects_options() {
1825+
use std::collections::HashMap;
1826+
let config = crate::seed::schema::DatabaseConfig {
1827+
driver: "mysql".into(),
1828+
host: "localhost".into(),
1829+
user: "root".into(),
1830+
name: "test".into(),
1831+
options: {
1832+
let mut m = HashMap::new();
1833+
m.insert("charset".into(), "utf8mb4".into());
1834+
m
1835+
},
1836+
..Default::default()
1837+
};
1838+
let err = connect(&config).err().expect("expected error");
1839+
assert!(err.contains("does not support 'options' for mysql"));
1840+
assert!(err.contains("charset"));
1841+
}
1842+
18161843
#[test]
18171844
fn test_escape_dsn_value() {
18181845
assert_eq!(escape_dsn_value("simple"), "simple");

0 commit comments

Comments
 (0)