diff --git a/app/Repositories/SeedBoxRepository.php b/app/Repositories/SeedBoxRepository.php index 7c40bb2f..77de92a4 100644 --- a/app/Repositories/SeedBoxRepository.php +++ b/app/Repositories/SeedBoxRepository.php @@ -199,7 +199,7 @@ class SeedBoxRepository extends BaseRepository $size = 1000; $page = 1; $logPrefix = "isAllowed: $isAllowed->name, field: $field->name, page: $page, size: $size"; - $selectRaw = sprintf("uid, group_concat(%s) as str", $field == IpAsnEnum::ASN ? 'asn' : 'ip'); + $selectRaw = sprintf("uid, %s as str", NexusDB::groupConcatField($field == IpAsnEnum::ASN ? 'asn' : 'ip')); while (true) { $list = SeedBoxRecord::getValidQuery(TypeEnum::USER, $isAllowed, $field) ->selectRaw($selectRaw) diff --git a/app/Repositories/ToolRepository.php b/app/Repositories/ToolRepository.php index e4fb5964..6f36dc17 100644 --- a/app/Repositories/ToolRepository.php +++ b/app/Repositories/ToolRepository.php @@ -511,8 +511,9 @@ class ToolRepository extends BaseRepository $stickyPromotionExists = NexusDB::hasTable($stickyPromotionParticipatorsTable); $claimTableExists = NexusDB::hasTable($claimTable); $hitAndRunTableExists = NexusDB::hasTable($hitAndRunTable); + $idsField = NexusDB::groupConcatField('id'); while (true) { - $snatchRes = NexusDB::select("select userid, torrentid, group_concat(id) as ids from snatched group by userid, torrentid having(count(*)) > 1 limit $size"); + $snatchRes = NexusDB::select("select userid, torrentid, $idsField as ids from snatched group by userid, torrentid having(count(*)) > 1 limit $size"); if (empty($snatchRes)) { break; } @@ -542,8 +543,9 @@ class ToolRepository extends BaseRepository public function removeDuplicatePeer() { $size = 2000; + $idsField = NexusDB::groupConcatField('id'); while (true) { - $results = NexusDB::select("select torrent, userid, group_concat(id) as ids from peers group by torrent, peer_id, userid having(count(*)) > 1 limit $size"); + $results = NexusDB::select("select torrent, userid, $idsField as ids from peers group by torrent, peer_id, userid having(count(*)) > 1 limit $size"); if (empty($results)) { do_log("[DELETE_DUPLICATED_PEERS], no data: ". last_query()); break; diff --git a/nexus/Database/NexusDB.php b/nexus/Database/NexusDB.php index 5f124029..54dfe344 100644 --- a/nexus/Database/NexusDB.php +++ b/nexus/Database/NexusDB.php @@ -533,7 +533,7 @@ class NexusDB } } - public static function upsertField(array $uniqueFields, array $updateFields): string + public static function upsertField(array $uniqueFields, array $updateFields = []): string { if (self::isMysql()) { $updates = []; @@ -557,4 +557,15 @@ class NexusDB } } + public static function groupConcatField(string $field): string + { + if (self::isMysql()) { + return sprintf("group_concat(%s)", $field); + } elseif (self::isPgsql()) { + return sprintf("string_agg(%s::text, ',')", $field); + } else { + throw new \RuntimeException('Not supported database.'); + } + } + }