Skip to content

Commit 45c2b99

Browse files
committed
wip
1 parent 427e78f commit 45c2b99

4 files changed

+33
-12
lines changed

crates/vespertide-query/src/sql/add_constraint.rs

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,24 @@ pub fn build_add_constraint(
1717
) -> Result<Vec<BuiltQuery>, QueryError> {
1818
match constraint {
1919
TableConstraint::PrimaryKey { columns, .. } => {
20-
// sea_query 0.32 doesn't support adding primary key via Table::alter() directly
21-
// We'll use Index::create().primary() which creates a primary key index
22-
// Note: This generates CREATE UNIQUE INDEX, not ALTER TABLE ADD PRIMARY KEY
23-
// but it's functionally equivalent for most databases
24-
let mut pk_idx = Index::create()
25-
.table(Alias::new(table))
26-
.primary()
27-
.to_owned();
28-
for col in columns {
29-
pk_idx = pk_idx.col(Alias::new(col)).to_owned();
30-
}
31-
Ok(vec![BuiltQuery::CreateIndex(Box::new(pk_idx))])
20+
// sea_query lacks ALTER TABLE ADD PRIMARY KEY; emit backend SQL
21+
let pg_cols = columns
22+
.iter()
23+
.map(|c| format!("\"{}\"", c))
24+
.collect::<Vec<_>>()
25+
.join(", ");
26+
let mysql_cols = columns
27+
.iter()
28+
.map(|c| format!("`{}`", c))
29+
.collect::<Vec<_>>()
30+
.join(", ");
31+
let pg_sql = format!("ALTER TABLE \"{}\" ADD PRIMARY KEY ({})", table, pg_cols);
32+
let mysql_sql = format!("ALTER TABLE `{}` ADD PRIMARY KEY ({})", table, mysql_cols);
33+
Ok(vec![BuiltQuery::Raw(RawSql::per_backend(
34+
pg_sql.clone(),
35+
mysql_sql,
36+
pg_sql,
37+
))])
3238
}
3339
TableConstraint::Unique { name, columns } => {
3440
// SQLite does not support ALTER TABLE ... ADD CONSTRAINT UNIQUE
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
source: crates/vespertide-query/src/sql/add_constraint.rs
3+
expression: "result.iter().map(|q| q.build(backend)).collect::<Vec<String>>().join(\"\\n\")"
4+
---
5+
ALTER TABLE `users` ADD PRIMARY KEY (`id`)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
source: crates/vespertide-query/src/sql/add_constraint.rs
3+
expression: "result.iter().map(|q| q.build(backend)).collect::<Vec<String>>().join(\"\\n\")"
4+
---
5+
ALTER TABLE "users" ADD PRIMARY KEY ("id")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
source: crates/vespertide-query/src/sql/add_constraint.rs
3+
expression: "result.iter().map(|q| q.build(backend)).collect::<Vec<String>>().join(\"\\n\")"
4+
---
5+
ALTER TABLE "users" ADD PRIMARY KEY ("id")

0 commit comments

Comments
 (0)