Oops, fix crashes in the Modeling Hub!

Neopets released a new Maraquan Koi, and it revealed a mistake in our modeling query! We already knew that the Maraquan Mynci was actually the same body type as the standard Mynci colors, but now the Koi is the same way, and because there's _two_ such species, the query started reacting by assuming that a _bunch_ of items that fit both the standard Mynci and standard Koi (which is a LOT of items!!) should also fit all _Maraquan_ pets, because it fits both the Maraquan Mynci and Maraquan Koi too. (Whereas previously, that part of the query would say "oh, it just fits the Maraquan Mynci, we don't need to assume it fits ALL maraquan pets, that's probably just species-specific.")

so yeah! This change should help the query ignore Maraquan species that have the same body type as standard species. That's fine to essentially treat them like they don't exist, because we won't lose out on any modeling that way: the standard models will cover the Maraquan versions for those two species!
This commit is contained in:
Emi Matchu 2022-06-20 15:21:38 -07:00
parent 43d091c546
commit c585b1236f

View file

@ -547,7 +547,21 @@ async function runItemModelingQuery(db, filterToItemIds) {
) AS modeled_species_ids, ) AS modeled_species_ids,
( (
SELECT GROUP_CONCAT(DISTINCT species_id ORDER BY species_id) SELECT GROUP_CONCAT(DISTINCT species_id ORDER BY species_id)
FROM pet_types WHERE color_id = T_BODIES.color_id FROM pet_types T_PT1
WHERE color_id = T_BODIES.color_id
AND (
-- For non-standard colors, ignore the species that have the same
-- body ID as standard pets. Otherwise, a lot of items will be
-- like "oh, we fit the Maraquan Koi and Maraquan Mynci, where
-- are all the other Maraquans??", which is incorrect!
color_id = 8
OR
(
SELECT count(*) FROM pet_types T_PT2
WHERE T_PT1.body_id = T_PT2.body_id
AND T_PT1.color_id != T_PT2.color_id
) = 0
)
) AS all_species_ids_for_this_color ) AS all_species_ids_for_this_color
FROM ( FROM (
-- NOTE: I found that extracting this as a separate query that runs -- NOTE: I found that extracting this as a separate query that runs
@ -569,8 +583,21 @@ async function runItemModelingQuery(db, filterToItemIds) {
) T_ITEMS ) T_ITEMS
INNER JOIN ( INNER JOIN (
SELECT DISTINCT body_id, species_id, color_id SELECT DISTINCT body_id, species_id, color_id
FROM pet_types FROM pet_types T_PT1
WHERE color_id IN (6, 8, 44, 46) WHERE color_id IN (6, 8, 44, 46)
AND (
-- For non-standard colors, ignore the species that have the same
-- body ID as standard pets. Otherwise, a lot of items will be
-- like "oh, we fit the Maraquan Koi and Maraquan Mynci, where
-- are all the other Maraquans??", which is incorrect!
color_id = 8
OR
(
SELECT count(*) FROM pet_types T_PT2
WHERE T_PT1.body_id = T_PT2.body_id
AND T_PT1.color_id != T_PT2.color_id
) = 0
)
ORDER BY body_id, species_id ORDER BY body_id, species_id
) T_BODIES ON T_ITEMS.body_id = T_BODIES.body_id ) T_BODIES ON T_ITEMS.body_id = T_BODIES.body_id
GROUP BY T_ITEMS.item_id, T_BODIES.color_id GROUP BY T_ITEMS.item_id, T_BODIES.color_id