- foreach ( $res as $row ) {
- // resolve role names and model names from in-memory cache, instead of joining.
- $row->role_name = $this->slotRoleStore->getName( (int)$row->slot_role_id );
- $row->model_name = $this->contentModelStore->getName( (int)$row->content_model );
+ foreach ( $slotRows as $row ) {
+ // Resolve role names and model names from in-memory cache, if they were not joined in.
+ if ( !isset( $row->role_name ) ) {
+ $row->role_name = $this->slotRoleStore->getName( (int)$row->slot_role_id );
+ }
+
+ if ( !isset( $row->model_name ) ) {
+ if ( isset( $row->content_model ) ) {
+ $row->model_name = $this->contentModelStore->getName( (int)$row->content_model );
+ } else {
+ // We may get here if $row->model_name is set but null, perhaps because it
+ // came from rev_content_model, which is NULL for the default model.
+ $slotRoleHandler = $this->slotRoleRegistry->getRoleHandler( $row->role_name );
+ $row->model_name = $slotRoleHandler->getDefaultModel( $title );
+ }
+ }
+
+ if ( !isset( $row->content_id ) && isset( $row->rev_text_id ) ) {
+ $row->slot_content_id
+ = $this->emulateContentId( intval( $row->rev_text_id ) );
+ }