@@ -855,3 +855,58 @@ test('drop column with pk and add pk to another column #2', async () => {
855855 expect ( st2 ) . toStrictEqual ( expectedSt2 ) ;
856856 expect ( pst2 ) . toStrictEqual ( expectedSt2 ) ;
857857} ) ;
858+
859+ // https://github.com/drizzle-team/drizzle-orm/issues/4456
860+ test ( 'drop column with pk and add pk to another column #3' , async ( ) => {
861+ const schema1 = {
862+ authors : mysqlTable (
863+ 'authors' ,
864+ {
865+ publicationId : varchar ( 'publication_id' , { length : 64 } ) ,
866+ authorID : varchar ( 'author_id' , { length : 10 } ) ,
867+ } ,
868+ ( table ) => {
869+ return {
870+ pk : primaryKey ( table . publicationId , table . authorID ) ,
871+ } ;
872+ } ,
873+ ) ,
874+ } ;
875+
876+ const { sqlStatements : st1 , next : n1 } = await diff ( { } , schema1 , [ ] ) ;
877+ const { sqlStatements : pst1 } = await push ( { db, to : schema1 } ) ;
878+ const expectedSt1 = [
879+ 'CREATE TABLE `authors` (\n\t`publication_id` varchar(64),\n\t`author_id` varchar(10),'
880+ + '\n\tCONSTRAINT `PRIMARY` PRIMARY KEY(`publication_id`,`author_id`)\n);\n' ,
881+ ] ;
882+ expect ( st1 ) . toStrictEqual ( expectedSt1 ) ;
883+ expect ( pst1 ) . toStrictEqual ( expectedSt1 ) ;
884+
885+ const schema2 = {
886+ authors : mysqlTable (
887+ 'authors' ,
888+ {
889+ publicationId : varchar ( 'publication_id' , { length : 64 } ) ,
890+ authorID : varchar ( 'author_id' , { length : 10 } ) ,
891+ orcidId : varchar ( 'orcid_id' , { length : 64 } ) ,
892+ } ,
893+ ( table ) => {
894+ return {
895+ pk : primaryKey ( table . publicationId , table . authorID , table . orcidId ) ,
896+ } ;
897+ } ,
898+ ) ,
899+ } ;
900+
901+ const { sqlStatements : st2 } = await diff ( n1 , schema2 , [ ] ) ;
902+ const { sqlStatements : pst2 } = await push ( { db, to : schema2 } ) ;
903+
904+ const expectedSt2 : string [ ] = [
905+ 'ALTER TABLE `authors` DROP PRIMARY KEY;' ,
906+ 'ALTER TABLE `authors` ADD `orcid_id` varchar(64);' ,
907+ 'ALTER TABLE `authors` ADD PRIMARY KEY (`publication_id`,`author_id`,`orcid_id`);' ,
908+ ] ;
909+
910+ expect ( st2 ) . toStrictEqual ( expectedSt2 ) ;
911+ expect ( pst2 ) . toStrictEqual ( expectedSt2 ) ;
912+ } ) ;
0 commit comments