@@ -1990,3 +1990,67 @@ void checkPackageVersionParams(String package, [String? version]) {
19901990 }
19911991 }
19921992}
1993+
1994+ /// Low-level, narrowly typed data access methods for [Package] entity.
1995+ extension PackageDatastoreDBExt on DatastoreDB {
1996+ _PackageDataAccess get packages => _PackageDataAccess (this );
1997+ }
1998+
1999+ extension PackageTransactionWrapperExt on TransactionWrapper {
2000+ _PackageTransactionDataAcccess get packages =>
2001+ _PackageTransactionDataAcccess (this );
2002+
2003+ _VersionTransactionDataAcccess get versions =>
2004+ _VersionTransactionDataAcccess (this );
2005+ }
2006+
2007+ final class _PackageDataAccess {
2008+ final DatastoreDB _db;
2009+
2010+ _PackageDataAccess (this ._db);
2011+
2012+ Future <bool > exists (String name) async {
2013+ final packageKey = _db.emptyKey.append (Package , id: name);
2014+ final package = await _db.lookupOrNull <Package >(packageKey);
2015+ return package != null ;
2016+ }
2017+
2018+ Stream <({String name})> listAllNames () async * {
2019+ final query = _db.query <Package >();
2020+ await for (final p in query.run ()) {
2021+ yield (name: p.name! );
2022+ }
2023+ }
2024+
2025+ Stream <({String name, DateTime updated})> listUpdatedSince (
2026+ DateTime since) async * {
2027+ final query = _db.query <Package >()
2028+ ..filter ('updated >' , since)
2029+ ..order ('-updated' );
2030+ await for (final p in query.run ()) {
2031+ yield (name: p.name! , updated: p.updated! );
2032+ }
2033+ }
2034+ }
2035+
2036+ class _PackageTransactionDataAcccess {
2037+ final TransactionWrapper _tx;
2038+
2039+ _PackageTransactionDataAcccess (this ._tx);
2040+
2041+ Future <Package ?> lookupOrNull (String name) async {
2042+ final pkgKey = _tx.emptyKey.append (Package , id: name);
2043+ return await _tx.lookupOrNull <Package >(pkgKey);
2044+ }
2045+ }
2046+
2047+ class _VersionTransactionDataAcccess {
2048+ final TransactionWrapper _tx;
2049+
2050+ _VersionTransactionDataAcccess (this ._tx);
2051+
2052+ Future <List <PackageVersion >> listVersionsOfPackage (String name) async {
2053+ final pkgKey = _tx.emptyKey.append (Package , id: name);
2054+ return await _tx.query <PackageVersion >(pkgKey).run ().toList ();
2055+ }
2056+ }
0 commit comments