You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
let result = match sqlx::query_as!(FetchedDependency,
156
-
r#"SELECT dp.dependent_id as mod_version_id, dp.dependency_id, dp.version, dp.compare AS "compare: _", dp.importance AS "importance: _" FROM dependencies dp
157
-
WHERE dp.dependent_id = ANY($1)"#,
132
+
// Fellow developer, I am sorry for what you're about to see :)
133
+
134
+
let result = match sqlx::query!(
135
+
r#"
136
+
WITH RECURSIVE dep_tree AS (
137
+
SELECT * FROM (
138
+
SELECT
139
+
m.id AS id,
140
+
mv.id AS mod_version_id,
141
+
mv.name AS name,
142
+
mv.version AS version,
143
+
dp.compare AS "needs_compare: ModVersionCompare",
144
+
dp.importance as "importance: DependencyImportance",
145
+
dp.version AS needs_version,
146
+
dp.dependency_id AS dependency,
147
+
dpcy_version.id AS dependency_vid,
148
+
dpcy_version.name AS depedency_name,
149
+
dpcy_version.version AS dependency_version,
150
+
mv.id AS start_node,
151
+
ROW_NUMBER() OVER(
152
+
PARTITION BY dp.dependency_id, mv.id
153
+
ORDER BY dpcy_version.version DESC, mv.version DESC
154
+
) rn
155
+
FROM mod_versions mv
156
+
INNER JOIN mods m ON mv.mod_id = m.id
157
+
INNER JOIN dependencies dp ON dp.dependent_id = mv.id
158
+
INNER JOIN mods dpcy ON dp.dependency_id = dpcy.id
159
+
INNER JOIN mod_versions dpcy_version ON dpcy_version.mod_id = dpcy.id
160
+
INNER JOIN mod_version_statuses dpcy_status ON dpcy_version.status_id = dpcy_status.id
161
+
WHERE dpcy_status.status = 'accepted'
162
+
AND mv.id = ANY($1)
163
+
AND CASE
164
+
WHEN dp.version = '*' THEN 1
165
+
WHEN SPLIT_PART(dpcy_version.version, '.', 1) = SPLIT_PART(dp.version, '.', 1) THEN 1
166
+
ELSE 0
167
+
END = 1
168
+
AND CASE
169
+
WHEN dp.version = '*' THEN 1
170
+
WHEN dp.compare = '<' AND dpcy_version.version < dp.version THEN 1
171
+
WHEN dp.compare = '>' AND dpcy_version.version > dp.version THEN 1
172
+
WHEN dp.compare = '<=' AND dpcy_version.version <= dp.version THEN 1
173
+
WHEN dp.compare = '>=' AND dpcy_version.version >= dp.version THEN 1
174
+
WHEN dp.compare = '=' AND dpcy_version.version = dp.version THEN 1
175
+
ELSE 0
176
+
END = 1
177
+
) as q
178
+
WHERE q.rn = 1
179
+
UNION
180
+
SELECT * FROM (
181
+
SELECT
182
+
m2.id AS id,
183
+
mv2.id AS mod_version_id,
184
+
mv2.name AS name,
185
+
mv2.version AS version,
186
+
dp2.compare AS "needs_compare: ModVersionCompare",
187
+
dp2.importance as "importance: DependencyImportance",
188
+
dp2.version AS needs_version,
189
+
dp2.dependency_id AS dependency,
190
+
dpcy_version2.id AS dependency_vid,
191
+
dpcy_version2.name AS depedency_name,
192
+
dpcy_version2.version AS dependency_version,
193
+
dt.start_node AS start_node,
194
+
ROW_NUMBER() OVER(
195
+
PARTITION BY dp2.dependency_id, mv2.id
196
+
ORDER BY dpcy_version2.version DESC, mv2.version DESC
197
+
) rn
198
+
FROM mod_versions mv2
199
+
INNER JOIN mods m2 ON mv2.mod_id = m2.id
200
+
INNER JOIN dependencies dp2 ON dp2.dependent_id = mv2.id
201
+
INNER JOIN mods dpcy2 ON dp2.dependency_id = dpcy2.id
202
+
INNER JOIN mod_versions dpcy_version2 ON dpcy_version2.mod_id = dpcy2.id
203
+
INNER JOIN mod_version_statuses dpcy_status2 ON dpcy_version2.status_id = dpcy_status2.id
204
+
INNER JOIN dep_tree dt ON dt.dependency_vid = mv2.id
205
+
WHERE dpcy_status2.status = 'accepted'
206
+
AND CASE
207
+
WHEN dp2.version = '*' THEN 1
208
+
WHEN SPLIT_PART(dpcy_version2.version, '.', 1) = SPLIT_PART(dp2.version, '.', 1) THEN 1
209
+
ELSE 0
210
+
END = 1
211
+
AND CASE
212
+
WHEN dp2.version = '*' THEN 1
213
+
WHEN dp2.compare = '<' AND dpcy_version2.version < dp2.version THEN 1
214
+
WHEN dp2.compare = '>' AND dpcy_version2.version > dp2.version THEN 1
215
+
WHEN dp2.compare = '<=' AND dpcy_version2.version <= dp2.version THEN 1
216
+
WHEN dp2.compare = '>=' AND dpcy_version2.version >= dp2.version THEN 1
217
+
WHEN dp2.compare = '=' AND dpcy_version2.version = dp2.version THEN 1
0 commit comments