|
@@ -63,8 +63,15 @@ class DataStore(Generic[DataType]):
|
|
|
await self.save(key, result)
|
|
|
return result
|
|
|
|
|
|
- async def all(self) -> AsyncGenerator[tuple[str, DataType], None]:
|
|
|
- async with self.connection.execute(f"SELECT key, body FROM {self.table_name}") as cursor:
|
|
|
+ async def all(self, **kw) -> AsyncGenerator[tuple[str, DataType], None]:
|
|
|
+ query = f"SELECT key, body FROM {self.table_name}"
|
|
|
+ filter_params = []
|
|
|
+ if len(kw) > 0:
|
|
|
+ query += " WHERE " + (" AND ".join("json_extract(body, ?) = ?" for _ in range(len(kw))))
|
|
|
+ for (key, value) in kw.items():
|
|
|
+ filter_params.append(f"$.{''.join(k for k in key if k.isalnum() or k == '_')}")
|
|
|
+ filter_params.append(value)
|
|
|
+ async with self.connection.execute(query, filter_params) as cursor:
|
|
|
async for (key, body) in cursor:
|
|
|
yield (key, self.datatype(**json.loads(body)))
|
|
|
|