summary refs log tree commit diff
path: root/synapse/storage
diff options
context:
space:
mode:
authorAndrew Morgan <andrew@amorgan.xyz>2021-04-16 15:02:53 +0100
committerAndrew Morgan <andrew@amorgan.xyz>2021-04-16 15:02:53 +0100
commitcf1e0196bbad0e285257fd71784682e9c070e73e (patch)
tree547361ab57e2348bc21c76eb81b409371624fa30 /synapse/storage
parentMerge commit 'c64002e1c' into anoa/dinsic_release_1_31_0 (diff)
parentAllow spam-checker modules to be provide async methods. (#8890) (diff)
downloadsynapse-cf1e0196bbad0e285257fd71784682e9c070e73e.tar.xz
Merge commit 'f14428b25' into anoa/dinsic_release_1_31_0
Diffstat (limited to 'synapse/storage')
-rw-r--r--synapse/storage/databases/main/devices.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/synapse/storage/databases/main/devices.py b/synapse/storage/databases/main/devices.py

index dfb4f87b8f..9097677648 100644 --- a/synapse/storage/databases/main/devices.py +++ b/synapse/storage/databases/main/devices.py
@@ -57,6 +57,38 @@ class DeviceWorkerStore(SQLBaseStore): self._prune_old_outbound_device_pokes, 60 * 60 * 1000 ) + async def count_devices_by_users(self, user_ids: Optional[List[str]] = None) -> int: + """Retrieve number of all devices of given users. + Only returns number of devices that are not marked as hidden. + + Args: + user_ids: The IDs of the users which owns devices + Returns: + Number of devices of this users. + """ + + def count_devices_by_users_txn(txn, user_ids): + sql = """ + SELECT count(*) + FROM devices + WHERE + hidden = '0' AND + """ + + clause, args = make_in_list_sql_clause( + txn.database_engine, "user_id", user_ids + ) + + txn.execute(sql + clause, args) + return txn.fetchone()[0] + + if not user_ids: + return 0 + + return await self.db_pool.runInteraction( + "count_devices_by_users", count_devices_by_users_txn, user_ids + ) + async def get_device(self, user_id: str, device_id: str) -> Dict[str, Any]: """Retrieve a device. Only returns devices that are not marked as hidden.