fix conflicting join when combining player and uploader filter

This commit is contained in:
Robin Appelman 2023-12-29 17:05:36 +01:00
commit 51d155d1a8

View file

@ -6,7 +6,7 @@ use crate::Result;
use maud::Render; use maud::Render;
use sea_query::extension::postgres::PgExpr; use sea_query::extension::postgres::PgExpr;
use sea_query::{ use sea_query::{
Alias, Expr, Func, Order, PostgresQueryBuilder, Query, SelectStatement, SimpleExpr, Alias, Expr, Func, JoinType, Order, PostgresQueryBuilder, Query, SelectStatement, SimpleExpr,
}; };
use sea_query_binder::SqlxBinder; use sea_query_binder::SqlxBinder;
use serde::{Deserialize, Deserializer}; use serde::{Deserialize, Deserializer};
@ -83,7 +83,8 @@ impl Demo {
id as i32 id as i32
) )
.fetch_optional(connection) .fetch_optional(connection)
.await? else { .await?
else {
return Ok(None); return Ok(None);
}; };
@ -429,11 +430,14 @@ impl Filter {
} }
if let Some(uploader) = &self.uploader { if let Some(uploader) = &self.uploader {
query query
.inner_join( .join_as(
JoinType::InnerJoin,
Users::Table, Users::Table,
Expr::col((Users::Table, Users::Id)).equals((Demos::Table, Demos::Uploader)), Alias::new("upload_user"),
Expr::col((Alias::new("upload_user"), Users::Id))
.equals((Demos::Table, Demos::Uploader)),
) )
.and_where(Expr::col(Users::SteamId).eq(uploader)); .and_where(Expr::col((Alias::new("upload_user"), Users::SteamId)).eq(uploader));
} }
if !self.players.is_empty() && self.players.len() < 19 { if !self.players.is_empty() && self.players.len() < 19 {
let mut player = self.players.iter(); let mut player = self.players.iter();
@ -452,7 +456,7 @@ impl Filter {
Users::Table, Users::Table,
Expr::col((Users::Table, Users::Id)).equals((Players::Table, Players::UserId)), Expr::col((Users::Table, Users::Id)).equals((Players::Table, Players::UserId)),
) )
.and_where(Expr::col(Users::SteamId).is_in(self.players.clone())); .and_where(Expr::col((Users::Table, Users::SteamId)).is_in(self.players.clone()));
query.group_by_col((Demos::Table, Players::Id)); query.group_by_col((Demos::Table, Players::Id));
query.and_having( query.and_having(
Expr::cust(&players_arr) Expr::cust(&players_arr)