@@ -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
0 commit comments