@@ -1193,6 +1193,130 @@ public function test_standalone_drop_index_updates_postgresql_and_mysql_metadata
11931193 $ this ->assertSame ( array ( 'PRIMARY ' ), array_column ( $ indexes , 'key_name ' ) );
11941194 }
11951195
1196+ /**
1197+ * Tests ALTER TABLE DROP INDEX removes PostgreSQL schema and MySQL metadata.
1198+ */
1199+ public function test_alter_table_drop_index_updates_postgresql_and_mysql_metadata (): void {
1200+ $ driver = $ this ->create_driver ();
1201+
1202+ $ driver ->query (
1203+ 'CREATE TABLE wptests_alter_drop_index (
1204+ id int NOT NULL,
1205+ option_name varchar(191) NOT NULL,
1206+ PRIMARY KEY (id)
1207+ ) '
1208+ );
1209+ $ driver ->store_mysql_schema_metadata (
1210+ 'CREATE TABLE wptests_alter_drop_index (
1211+ id int NOT NULL,
1212+ option_name varchar(191) NOT NULL,
1213+ PRIMARY KEY (id)
1214+ ) '
1215+ );
1216+ $ driver ->query ( 'CREATE INDEX option_name ON wptests_alter_drop_index (option_name) ' );
1217+
1218+ $ this ->assertSame ( 0 , $ driver ->query ( 'ALTER TABLE wptests_alter_drop_index DROP INDEX option_name ' ) );
1219+ $ this ->assertSame (
1220+ array (
1221+ array (
1222+ 'sql ' => 'DROP INDEX "wptests_alter_drop_index__option_name" ' ,
1223+ 'params ' => array (),
1224+ ),
1225+ ),
1226+ $ driver ->get_last_postgresql_queries ()
1227+ );
1228+
1229+ $ indexes = $ this ->get_mysql_index_metadata_rows ( $ driver , 'wptests_alter_drop_index ' );
1230+ $ this ->assertSame ( array ( 'PRIMARY ' ), array_column ( $ indexes , 'key_name ' ) );
1231+ }
1232+
1233+ /**
1234+ * Tests ALTER TABLE DROP INDEX accepts backticked identifiers.
1235+ */
1236+ public function test_alter_table_drop_index_accepts_backticked_identifiers (): void {
1237+ $ driver = $ this ->create_driver ();
1238+
1239+ $ driver ->query (
1240+ 'CREATE TABLE wptests_alter_drop_backtick_index (
1241+ option_name varchar(191) NOT NULL
1242+ ) '
1243+ );
1244+ $ driver ->store_mysql_schema_metadata (
1245+ 'CREATE TABLE wptests_alter_drop_backtick_index (
1246+ option_name varchar(191) NOT NULL
1247+ ) '
1248+ );
1249+ $ driver ->query ( 'CREATE INDEX option_name ON wptests_alter_drop_backtick_index (option_name) ' );
1250+
1251+ $ this ->assertSame ( 0 , $ driver ->query ( 'ALTER TABLE `wptests_alter_drop_backtick_index` DROP INDEX `option_name` ' ) );
1252+ $ this ->assertSame (
1253+ array (
1254+ array (
1255+ 'sql ' => 'DROP INDEX "wptests_alter_drop_backtick_index__option_name" ' ,
1256+ 'params ' => array (),
1257+ ),
1258+ ),
1259+ $ driver ->get_last_postgresql_queries ()
1260+ );
1261+
1262+ $ this ->assertSame ( array (), $ this ->get_mysql_index_metadata_rows ( $ driver , 'wptests_alter_drop_backtick_index ' ) );
1263+ }
1264+
1265+ /**
1266+ * Tests ALTER TABLE DROP KEY removes PostgreSQL schema and MySQL metadata.
1267+ */
1268+ public function test_alter_table_drop_key_updates_postgresql_and_mysql_metadata (): void {
1269+ $ driver = $ this ->create_driver ();
1270+
1271+ $ driver ->query (
1272+ 'CREATE TABLE wptests_alter_drop_key (
1273+ option_name varchar(191) NOT NULL
1274+ ) '
1275+ );
1276+ $ driver ->store_mysql_schema_metadata (
1277+ 'CREATE TABLE wptests_alter_drop_key (
1278+ option_name varchar(191) NOT NULL
1279+ ) '
1280+ );
1281+ $ driver ->query ( 'CREATE INDEX option_name ON wptests_alter_drop_key (option_name) ' );
1282+
1283+ $ this ->assertSame ( 0 , $ driver ->query ( 'ALTER TABLE wptests_alter_drop_key DROP KEY option_name ' ) );
1284+ $ this ->assertSame (
1285+ array (
1286+ array (
1287+ 'sql ' => 'DROP INDEX "wptests_alter_drop_key__option_name" ' ,
1288+ 'params ' => array (),
1289+ ),
1290+ ),
1291+ $ driver ->get_last_postgresql_queries ()
1292+ );
1293+
1294+ $ this ->assertSame ( array (), $ this ->get_mysql_index_metadata_rows ( $ driver , 'wptests_alter_drop_key ' ) );
1295+ }
1296+
1297+ /**
1298+ * Tests ALTER TABLE primary-key drop forms fail before backend execution.
1299+ */
1300+ public function test_alter_table_drop_primary_key_forms_do_not_reach_backend (): void {
1301+ $ queries = array (
1302+ 'ALTER TABLE wptests_alter_drop_primary DROP PRIMARY KEY ' ,
1303+ 'ALTER TABLE wptests_alter_drop_primary DROP INDEX PRIMARY ' ,
1304+ 'ALTER TABLE wptests_alter_drop_primary DROP KEY `PRIMARY` ' ,
1305+ );
1306+
1307+ foreach ( $ queries as $ query ) {
1308+ $ driver = $ this ->create_driver ();
1309+
1310+ try {
1311+ $ driver ->query ( $ query );
1312+ $ this ->fail ( 'Expected unsupported ALTER TABLE primary-key drop to throw. ' );
1313+ } catch ( InvalidArgumentException $ e ) {
1314+ $ this ->assertSame ( 'Unsupported ALTER TABLE statement. ' , $ e ->getMessage (), $ query );
1315+ $ this ->assertSame ( array (), $ driver ->get_last_postgresql_queries (), $ query );
1316+ }
1317+ }
1318+ }
1319+
11961320 /**
11971321 * Tests main database-qualified standalone index statements target public table metadata.
11981322 */
0 commit comments