github.com/status-im/status-go@v1.1.0/services/wallet/activity/recipients.sql (about) 1 -- Query to retrive all recipients for selected addresses and networks 2 WITH filter_conditions AS ( 3 SELECT 4 ? AS filterAllAddresses, 5 ? AS includeAllNetworks, 6 ? AS pendingStatus 7 ), 8 filter_addresses(address) AS ( 9 VALUES 10 %s 11 ), 12 filter_networks(network_id) AS ( 13 VALUES 14 %s 15 ), 16 pending_network_ids AS ( 17 SELECT 18 multi_transaction_id 19 FROM 20 pending_transactions, 21 filter_conditions 22 WHERE 23 pending_transactions.multi_transaction_id != 0 24 AND pending_transactions.status = pendingStatus 25 AND pending_transactions.network_id IN filter_networks 26 GROUP BY 27 pending_transactions.multi_transaction_id 28 ), 29 tr_network_ids AS ( 30 SELECT 31 multi_transaction_id 32 FROM 33 transfers 34 WHERE 35 transfers.loaded == 1 36 AND transfers.multi_transaction_id != 0 37 AND network_id IN filter_networks 38 GROUP BY 39 transfers.multi_transaction_id 40 ) 41 SELECT 42 to_address, 43 MIN(timestamp) AS min_timestamp 44 FROM ( 45 SELECT 46 transfers.tx_to_address as to_address, 47 MIN(transfers.timestamp) AS timestamp 48 FROM 49 transfers, filter_conditions 50 WHERE 51 transfers.multi_transaction_id = 0 AND transfers.tx_to_address NOT NULL 52 AND (filterAllAddresses OR transfers.address IN filter_addresses) 53 AND (includeAllNetworks OR transfers.network_id IN filter_networks) 54 GROUP BY 55 transfers.tx_to_address 56 57 UNION 58 59 SELECT 60 pending_transactions.to_address AS to_address, 61 MIN(pending_transactions.timestamp) AS timestamp 62 FROM 63 pending_transactions, filter_conditions 64 WHERE 65 pending_transactions.multi_transaction_id = 0 AND pending_transactions.to_address NOT NULL 66 AND (filterAllAddresses OR pending_transactions.from_address IN filter_addresses) 67 AND (includeAllNetworks OR pending_transactions.network_id IN filter_networks) 68 GROUP BY 69 pending_transactions.to_address 70 71 UNION 72 73 SELECT 74 multi_transactions.to_address AS to_address, 75 MIN(multi_transactions.timestamp) AS timestamp 76 FROM 77 multi_transactions, filter_conditions 78 WHERE 79 (filterAllAddresses OR multi_transactions.from_address IN filter_addresses) 80 AND ( 81 includeAllNetworks 82 OR (multi_transactions.from_network_id IN filter_networks) 83 OR (multi_transactions.to_network_id IN filter_networks) 84 OR ( 85 COALESCE(multi_transactions.from_network_id, 0) = 0 86 AND COALESCE(multi_transactions.to_network_id, 0) = 0 87 AND ( 88 EXISTS ( 89 SELECT 90 1 91 FROM 92 tr_network_ids 93 WHERE 94 multi_transactions.id = tr_network_ids.multi_transaction_id 95 ) 96 OR EXISTS ( 97 SELECT 98 1 99 FROM 100 pending_network_ids 101 WHERE 102 multi_transactions.id = pending_network_ids.multi_transaction_id 103 ) 104 ) 105 ) 106 ) 107 GROUP BY 108 multi_transactions.to_address 109 ) AS combined_result 110 GROUP BY 111 to_address 112 ORDER BY 113 min_timestamp DESC 114 LIMIT ? OFFSET ?;