fix(2meet-data-optimizer): do not recreate a deleted entity's flat row

- Deleting a post / user / term / comment drops its flat row in the adapter delete hook, then WordPress deletes each meta row; sync_from_native upserted NULL for each and brought the row back (512 orphan rows on dev36). With no native value it now only clears the column on an existing row
- Verify: tests/live/run.php resync (25/25, entity deletes in dual_write and shadow_read leave no flat row); mut.php T8 flat_row NO-ROW; integration 516
- PR: PR-057b
This commit is contained in:
2026-09-26 20:34:28 +08:00
parent 4fc59b757e
commit a7134bfb80
3 changed files with 77 additions and 2 deletions
+26
View File
@@ -110,3 +110,29 @@ foreach ( array( 'dual_write', 'shadow_read' ) as $tmdo_live_mode ) {
);
}
}
TMDO_Live::test(
'deleting an entity leaves no flat row behind (dual_write and shadow_read)',
static function () {
require_once ABSPATH . 'wp-admin/includes/user.php';
$deleters = array(
'user' => static fn( int $id ) => wp_delete_user( $id ),
'post' => static fn( int $id ) => wp_delete_post( $id, true ),
'term' => static fn( int $id ) => wp_delete_term( $id, 'hp_listing_category' ),
'comment' => static fn( int $id ) => wp_delete_comment( $id, true ),
);
foreach ( array( 'dual_write', 'shadow_read' ) as $mode ) {
foreach ( tmdo_live_resync_cases() as $label => $case ) {
list( $type, $key, $make, $pt ) = $case;
TMDO_Live_Fixtures::field( $type, $key, $pt );
TMDO_Live_Fixtures::use_modes( array( $type => $mode ) );
$id = $make();
update_metadata( $type, $id, $key, '41' );
$deleters[ $type ]( $id );
tmdo_live_assert_same( 'NO-ROW', TMDO_Live_Fixtures::flat( $type, $id, $key, $pt ), "{$mode} {$label}: flat row after delete" );
}
}
}
);