Add a function queryValidPaths()

queryValidPaths() combines multiple calls to isValidPath() in one.
This matters when using the Nix daemon because it reduces latency.
For instance, on "nix-env -qas \*" it reduces execution time from 5.7s
to 4.7s (which is indistinguishable from the non-daemon case).
This commit is contained in:
Eelco Dolstra 2012-07-11 11:08:47 -04:00
parent 667d5f1936
commit 58ef4d9a95
8 changed files with 49 additions and 3 deletions

View file

@ -744,6 +744,15 @@ bool LocalStore::isValidPath(const Path & path)
}
PathSet LocalStore::queryValidPaths(const PathSet & paths)
{
PathSet res;
foreach (PathSet::const_iterator, i, paths)
if (isValidPath(*i)) res.insert(*i);
return res;
}
PathSet LocalStore::queryAllValidPaths()
{
SQLiteStmt stmt;

View file

@ -99,6 +99,8 @@ public:
bool isValidPath(const Path & path);
PathSet queryValidPaths(const PathSet & paths);
PathSet queryAllValidPaths();
ValidPathInfo queryPathInfo(const Path & path);

View file

@ -217,6 +217,23 @@ bool RemoteStore::isValidPath(const Path & path)
}
PathSet RemoteStore::queryValidPaths(const PathSet & paths)
{
if (GET_PROTOCOL_MINOR(daemonVersion) < 12) {
PathSet res;
foreach (PathSet::const_iterator, i, paths)
if (isValidPath(*i)) res.insert(*i);
return res;
} else {
openConnection();
writeInt(wopQueryValidPaths, to);
writeStrings(paths, to);
processStderr();
return readStorePaths<PathSet>(from);
}
}
PathSet RemoteStore::queryAllValidPaths()
{
openConnection();

View file

@ -27,6 +27,8 @@ public:
bool isValidPath(const Path & path);
PathSet queryValidPaths(const PathSet & paths);
PathSet queryAllValidPaths();
ValidPathInfo queryPathInfo(const Path & path);

View file

@ -113,6 +113,9 @@ public:
/* Check whether a path is valid. */
virtual bool isValidPath(const Path & path) = 0;
/* Query which of the given paths is valid. */
virtual PathSet queryValidPaths(const PathSet & paths) = 0;
/* Query the set of all valid paths. */
virtual PathSet queryAllValidPaths() = 0;

View file

@ -41,6 +41,7 @@ typedef enum {
wopImportPaths = 27,
wopQueryDerivationOutputNames = 28,
wopQuerySubstitutablePathInfos = 29,
wopQueryValidPaths = 30,
} WorkerOp;