From 0ef96c0bcafa0e50a44754afa1b350a4ea7474c2 Mon Sep 17 00:00:00 2001 From: Wyatt Verchere Date: Mon, 4 Dec 2023 13:51:28 -0800 Subject: [PATCH] fixed issue (#778) --- .../20231116112800_side_types_overhaul.sql | 66 ++++++++++++------- .../20231130102300_additional_indices.sql | 2 - 2 files changed, 42 insertions(+), 26 deletions(-) delete mode 100644 migrations/20231130102300_additional_indices.sql diff --git a/migrations/20231116112800_side_types_overhaul.sql b/migrations/20231116112800_side_types_overhaul.sql index 98e2551f9..ce168f79e 100644 --- a/migrations/20231116112800_side_types_overhaul.sql +++ b/migrations/20231116112800_side_types_overhaul.sql @@ -1,3 +1,5 @@ +CREATE INDEX version_fields_version_id ON version_fields (version_id); +CREATE INDEX hashes_file_id ON hashes (file_id); INSERT INTO loader_fields (field, field_type, optional) SELECT 'singleplayer', 'boolean', false; INSERT INTO loader_fields (field, field_type, optional) SELECT 'client_and_server', 'boolean', false; @@ -14,7 +16,7 @@ ALTER TABLE versions ADD COLUMN server_only boolean; UPDATE versions v SET singleplayer = true FROM version_fields vf INNER JOIN loader_fields lf ON vf.field_id = lf.id -INNER JOIN loader_field_enum_values lfev ON lf.enum_type = lfev.id AND vf.enum_value = lfev.id +INNER JOIN loader_field_enum_values lfev ON lf.enum_type = lfev.enum_id AND vf.enum_value = lfev.id WHERE v.id = vf.version_id AND (lf.field = 'client_side' OR lf.field = 'server_side') AND (lfev.value = 'required' OR lfev.value = 'optional'); @@ -22,33 +24,49 @@ AND (lf.field = 'client_side' OR lf.field = 'server_side') AND (lfev.value = 're UPDATE versions v SET client_and_server = true FROM version_fields vf INNER JOIN loader_fields lf ON vf.field_id = lf.id -INNER JOIN loader_field_enum_values lfev ON lf.enum_type = lfev.id AND vf.enum_value = lfev.id +INNER JOIN loader_field_enum_values lfev ON lf.enum_type = lfev.enum_id AND vf.enum_value = lfev.id WHERE v.id = vf.version_id AND (lf.field = 'client_side' OR lf.field = 'server_side') AND (lfev.value = 'required' OR lfev.value = 'optional'); --- Set client_only to be true if client_side is 'required' or 'optional', and server_side is 'optional', 'unsupported', or 'unknown' -UPDATE versions v SET client_only = true -FROM version_fields vf -INNER JOIN loader_fields lf ON vf.field_id = lf.id -INNER JOIN loader_field_enum_values lfev ON lf.enum_type = lfev.enum_id AND vf.enum_value = lfev.id -CROSS JOIN version_fields vf2 -INNER JOIN loader_fields lf2 ON vf2.field_id = lf2.id -INNER JOIN loader_field_enum_values lfev2 ON lf2.enum_type = lfev2.enum_id AND vf2.enum_value = lfev2.id -WHERE v.id = vf.version_id AND v.id = vf2.version_id -AND lf.field = 'client_side' AND (lfev.value = 'required' OR lfev.value = 'optional') -AND lf2.field = 'server_side' AND (lfev2.value = 'optional' OR lfev2.value = 'unsupported' OR lfev2.value = 'unknown'); +-- -- Set client_only to be true if client_side is 'required' or 'optional', and server_side is 'optional', 'unsupported', or 'unknown' +UPDATE versions v +SET client_only = true +WHERE EXISTS ( + SELECT 1 + FROM version_fields vf + INNER JOIN loader_fields lf ON vf.field_id = lf.id + INNER JOIN loader_field_enum_values lfev ON lf.enum_type = lfev.enum_id AND vf.enum_value = lfev.id + WHERE v.id = vf.version_id + AND lf.field = 'client_side' AND (lfev.value = 'required' OR lfev.value = 'optional') +) +AND EXISTS ( + SELECT 1 + FROM version_fields vf2 + INNER JOIN loader_fields lf2 ON vf2.field_id = lf2.id + INNER JOIN loader_field_enum_values lfev2 ON lf2.enum_type = lfev2.enum_id AND vf2.enum_value = lfev2.id + WHERE v.id = vf2.version_id + AND lf2.field = 'server_side' AND (lfev2.value = 'optional' OR lfev2.value = 'unsupported' OR lfev2.value = 'unknown') +); --- Set server_only to be true if server_side is 'required' or 'optional', and client_side is 'optional', 'unsupported', or 'unknown' -UPDATE versions v SET server_only = true -FROM version_fields vf -INNER JOIN loader_fields lf ON vf.field_id = lf.id -INNER JOIN loader_field_enum_values lfev ON lf.enum_type = lfev.enum_id AND vf.enum_value = lfev.id -CROSS JOIN version_fields vf2 -INNER JOIN loader_fields lf2 ON vf2.field_id = lf2.id -INNER JOIN loader_field_enum_values lfev2 ON lf2.enum_type = lfev2.enum_id AND vf2.enum_value = lfev2.id -WHERE v.id = vf.version_id AND v.id = vf2.version_id -AND lf.field = 'server_side' AND (lfev.value = 'required' OR lfev.value = 'optional') -AND lf2.field = 'client_side' AND (lfev2.value = 'optional' OR lfev2.value = 'unsupported' OR lfev2.value = 'unknown'); +-- -- Set server_only to be true if server_side is 'required' or 'optional', and client_side is 'optional', 'unsupported', or 'unknown' +UPDATE versions v +SET server_only = true +WHERE EXISTS ( + SELECT 1 + FROM version_fields vf + INNER JOIN loader_fields lf ON vf.field_id = lf.id + INNER JOIN loader_field_enum_values lfev ON lf.enum_type = lfev.enum_id AND vf.enum_value = lfev.id + WHERE v.id = vf.version_id + AND lf.field = 'server_side' AND (lfev.value = 'required' OR lfev.value = 'optional') +) +AND EXISTS ( + SELECT 1 + FROM version_fields vf2 + INNER JOIN loader_fields lf2 ON vf2.field_id = lf2.id + INNER JOIN loader_field_enum_values lfev2 ON lf2.enum_type = lfev2.enum_id AND vf2.enum_value = lfev2.id + WHERE v.id = vf2.version_id + AND lf2.field = 'client_side' AND (lfev2.value = 'optional' OR lfev2.value = 'unsupported' OR lfev2.value = 'unknown') +); -- Insert the values into the version_fields table INSERT INTO version_fields (version_id, field_id, int_value) diff --git a/migrations/20231130102300_additional_indices.sql b/migrations/20231130102300_additional_indices.sql deleted file mode 100644 index a71138eae..000000000 --- a/migrations/20231130102300_additional_indices.sql +++ /dev/null @@ -1,2 +0,0 @@ -CREATE INDEX version_fields_version_id ON version_fields (version_id); -CREATE INDEX hashes_file_id ON hashes (file_id);