mirror of
https://github.com/modrinth/code.git
synced 2026-08-24 16:44:51 +00:00
fix(labrinth): fix filtering not working unless breakdown set to same field (#6608)
* fix(labrinth): return columns used in filters fixes modrinth/code#6607 * chore(labrinth): sqlx query data update * don't implicitly breakdown when filtering by a metric * fix docs --------- Co-authored-by: aecsocket <43144841+aecsocket@users.noreply.github.com>
This commit is contained in:
co-authored by
aecsocket
parent
e1556a8ee3
commit
7c4df7442b
@@ -376,18 +376,39 @@ pub(crate) async fn fetch(
|
||||
|
||||
let use_columns = &[
|
||||
("use_project_id", uses(F::ProjectId)),
|
||||
("use_domain", uses(F::Domain)),
|
||||
(
|
||||
"use_domain",
|
||||
uses(F::Domain) || !metrics.filter_by.domain.is_empty(),
|
||||
),
|
||||
(
|
||||
"use_user_agent",
|
||||
uses(F::UserAgent) || !metrics.filter_by.user_agent.is_empty(),
|
||||
),
|
||||
("use_version_id", uses(F::VersionId)),
|
||||
(
|
||||
"use_version_id",
|
||||
uses(F::VersionId) || !metrics.filter_by.version_id.is_empty(),
|
||||
),
|
||||
("use_dependent_project_id", uses(F::DependentProjectId)),
|
||||
("use_monetized", uses(F::Monetized)),
|
||||
("use_country", uses(F::Country)),
|
||||
("use_reason", uses(F::Reason)),
|
||||
("use_game_version", uses(F::GameVersion)),
|
||||
("use_loader", uses(F::Loader)),
|
||||
(
|
||||
"use_monetized",
|
||||
uses(F::Monetized) || !metrics.filter_by.monetized.is_empty(),
|
||||
),
|
||||
(
|
||||
"use_country",
|
||||
uses(F::Country) || !metrics.filter_by.country.is_empty(),
|
||||
),
|
||||
(
|
||||
"use_reason",
|
||||
uses(F::Reason) || !metrics.filter_by.reason.is_empty(),
|
||||
),
|
||||
(
|
||||
"use_game_version",
|
||||
uses(F::GameVersion) || !metrics.filter_by.game_version.is_empty(),
|
||||
),
|
||||
(
|
||||
"use_loader",
|
||||
uses(F::Loader) || !metrics.filter_by.loader.is_empty(),
|
||||
),
|
||||
];
|
||||
|
||||
let mut query = cx
|
||||
@@ -453,7 +474,7 @@ pub(crate) async fn fetch(
|
||||
bucket: row.bucket,
|
||||
project_id: row.project_id,
|
||||
domain: uses_column("use_domain").then(|| row.domain.clone()),
|
||||
user_agent: uses(F::UserAgent)
|
||||
user_agent: uses_column("use_user_agent")
|
||||
.then_some(normalized_source)
|
||||
.flatten(),
|
||||
version_id: uses_column("use_version_id").then_some(row.version_id),
|
||||
@@ -505,6 +526,30 @@ pub(crate) async fn fetch(
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
if !uses(F::Domain) {
|
||||
key.domain = None;
|
||||
}
|
||||
if !uses(F::UserAgent) {
|
||||
key.user_agent = None;
|
||||
}
|
||||
if !uses(F::VersionId) {
|
||||
key.version_id = None;
|
||||
}
|
||||
if !uses(F::Monetized) {
|
||||
key.monetized = None;
|
||||
}
|
||||
if !uses(F::Country) {
|
||||
key.country = None;
|
||||
}
|
||||
if !uses(F::Reason) {
|
||||
key.reason = None;
|
||||
}
|
||||
if !uses(F::GameVersion) {
|
||||
key.game_version = None;
|
||||
}
|
||||
if !uses(F::Loader) {
|
||||
key.loader = None;
|
||||
}
|
||||
*output_buckets.entry(key).or_default() += downloads;
|
||||
}
|
||||
|
||||
|
||||
@@ -184,10 +184,22 @@ pub(crate) async fn fetch(
|
||||
let uses = |field| metrics.bucket_by.contains(&field);
|
||||
let use_columns = &[
|
||||
("use_project_id", uses(F::ProjectId)),
|
||||
("use_version_id", uses(F::VersionId)),
|
||||
("use_loader", uses(F::Loader)),
|
||||
("use_game_version", uses(F::GameVersion)),
|
||||
("use_country", uses(F::Country)),
|
||||
(
|
||||
"use_version_id",
|
||||
uses(F::VersionId) || !metrics.filter_by.version_id.is_empty(),
|
||||
),
|
||||
(
|
||||
"use_loader",
|
||||
uses(F::Loader) || !metrics.filter_by.loader.is_empty(),
|
||||
),
|
||||
(
|
||||
"use_game_version",
|
||||
uses(F::GameVersion) || !metrics.filter_by.game_version.is_empty(),
|
||||
),
|
||||
(
|
||||
"use_country",
|
||||
uses(F::Country) || !metrics.filter_by.country.is_empty(),
|
||||
),
|
||||
];
|
||||
let uses_column = |name| {
|
||||
use_columns
|
||||
@@ -265,6 +277,18 @@ pub(crate) async fn fetch(
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
if !uses(F::VersionId) {
|
||||
key.version_id = None;
|
||||
}
|
||||
if !uses(F::Loader) {
|
||||
key.loader = None;
|
||||
}
|
||||
if !uses(F::GameVersion) {
|
||||
key.game_version = None;
|
||||
}
|
||||
if !uses(F::Country) {
|
||||
key.country = None;
|
||||
}
|
||||
*output_buckets.entry(key).or_default() += seconds;
|
||||
}
|
||||
|
||||
|
||||
@@ -143,10 +143,22 @@ pub(crate) async fn fetch(
|
||||
let uses = |field| metrics.bucket_by.contains(&field);
|
||||
let use_columns = &[
|
||||
("use_project_id", uses(F::ProjectId)),
|
||||
("use_domain", uses(F::Domain)),
|
||||
("use_site_path", uses(F::SitePath)),
|
||||
("use_monetized", uses(F::Monetized)),
|
||||
("use_country", uses(F::Country)),
|
||||
(
|
||||
"use_domain",
|
||||
uses(F::Domain) || !metrics.filter_by.domain.is_empty(),
|
||||
),
|
||||
(
|
||||
"use_site_path",
|
||||
uses(F::SitePath) || !metrics.filter_by.site_path.is_empty(),
|
||||
),
|
||||
(
|
||||
"use_monetized",
|
||||
uses(F::Monetized) || !metrics.filter_by.monetized.is_empty(),
|
||||
),
|
||||
(
|
||||
"use_country",
|
||||
uses(F::Country) || !metrics.filter_by.country.is_empty(),
|
||||
),
|
||||
];
|
||||
let uses_column = |name| {
|
||||
use_columns
|
||||
@@ -211,6 +223,18 @@ pub(crate) async fn fetch(
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
if !uses(F::Domain) {
|
||||
key.domain = None;
|
||||
}
|
||||
if !uses(F::SitePath) {
|
||||
key.site_path = None;
|
||||
}
|
||||
if !uses(F::Monetized) {
|
||||
key.monetized = None;
|
||||
}
|
||||
if !uses(F::Country) {
|
||||
key.country = None;
|
||||
}
|
||||
*output_buckets.entry(key).or_default() += views;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user