From cd01a7b72730bb9851c7e45a48e4f115be20ba93 Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Thu, 8 Feb 2024 16:44:03 +0900 Subject: [PATCH] Improve performance of payout db queries --- .../PullPaymentHostedService.cs | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/BTCPayServer/HostedServices/PullPaymentHostedService.cs b/BTCPayServer/HostedServices/PullPaymentHostedService.cs index 137a2497e..6883ef632 100644 --- a/BTCPayServer/HostedServices/PullPaymentHostedService.cs +++ b/BTCPayServer/HostedServices/PullPaymentHostedService.cs @@ -173,7 +173,15 @@ namespace BTCPayServer.HostedServices var query = ctx.Payouts.AsQueryable(); if (payoutQuery.States is not null) { - query = query.Where(data => payoutQuery.States.Contains(data.State)); + if (payoutQuery.States.Length == 1) + { + var state = payoutQuery.States[0]; + query = query.Where(data => data.State == state); + } + else + { + query = query.Where(data => payoutQuery.States.Contains(data.State)); + } } if (payoutQuery.PullPayments is not null) @@ -196,12 +204,28 @@ namespace BTCPayServer.HostedServices if (payoutQuery.PaymentMethods is not null) { - query = query.Where(data => payoutQuery.PaymentMethods.Contains(data.PaymentMethodId)); + if (payoutQuery.PaymentMethods.Length == 1) + { + var pm = payoutQuery.PaymentMethods[0]; + query = query.Where(data => pm == data.PaymentMethodId); + } + else + { + query = query.Where(data => payoutQuery.PaymentMethods.Contains(data.PaymentMethodId)); + } } if (payoutQuery.Stores is not null) { - query = query.Where(data => payoutQuery.Stores.Contains(data.StoreDataId)); + if (payoutQuery.Stores.Length == 1) + { + var store = payoutQuery.Stores[0]; + query = query.Where(data => store == data.StoreDataId); + } + else + { + query = query.Where(data => payoutQuery.Stores.Contains(data.StoreDataId)); + } } if (payoutQuery.IncludeStoreData) {