From 4dd7b7a7a0c582d23de692b2b52e4395bee81278 Mon Sep 17 00:00:00 2001 From: Max Wolter Date: Mon, 29 Aug 2022 16:44:11 +0100 Subject: [PATCH] Improve performance of owner sanitizing (#220) * Change SQL queries for owner sanitizing * Remove SQL query comment --- storage/graph/owner_repository.go | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/storage/graph/owner_repository.go b/storage/graph/owner_repository.go index 685d46cc..4365ef77 100644 --- a/storage/graph/owner_repository.go +++ b/storage/graph/owner_repository.go @@ -77,16 +77,10 @@ func (o *OwnerRepository) Upsert(transfers ...*events.Transfer) error { func (o *OwnerRepository) Sanitize() error { result, err := o.build. - Select( - "a.owner", - "a.nft_id", - "a.event_id", - "b.event_id", - ). - From("owners as a, owners as b"). - Where("a.owner = b.owner"). - Where("a.nft_id = b.nft_id"). - Where("a.number = -b.number"). + Select("owner", "nft_id"). + From("owners"). + GroupBy("owner, nft_id"). + Having("SUM(number) = 0"). Query() if err != nil { return fmt.Errorf("could not execute query: %w", err) @@ -99,12 +93,10 @@ func (o *OwnerRepository) Sanitize() error { return fmt.Errorf("could not get next row: %w", result.Err()) } - var owner, nftID, eventID1, eventID2 string + var owner, nftID string err = result.Scan( &owner, &nftID, - &eventID1, - &eventID2, ) if err != nil { return fmt.Errorf("could not scan next row: %w", err) @@ -114,7 +106,6 @@ func (o *OwnerRepository) Sanitize() error { Delete("owners"). Where("owner = ?", owner). Where("nft_id = ?", nftID). - Where("(event_id = ? OR event_id = ?)", eventID1, eventID2). Exec() if err != nil { return fmt.Errorf("could not delete rows: %w", err)