* A function to query just the database id of a valid path.
This commit is contained in:
		
							parent
							
								
									6baa2a2f5e
								
							
						
					
					
						commit
						cfe742cfc5
					
				
					 2 changed files with 22 additions and 16 deletions
				
			
		| 
						 | 
					@ -461,10 +461,8 @@ void LocalStore::registerValidPath(const ValidPathInfo & info)
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    unsigned long long id = addValidPath(info2);
 | 
					    unsigned long long id = addValidPath(info2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    foreach (PathSet::const_iterator, i, info2.references) {
 | 
					    foreach (PathSet::const_iterator, i, info2.references)
 | 
				
			||||||
        ValidPathInfo ref = queryPathInfo(*i);
 | 
					        addReference(id, queryValidPathId(*i));
 | 
				
			||||||
        addReference(id, ref.id);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
    txn.commit();
 | 
					    txn.commit();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -551,6 +549,17 @@ ValidPathInfo LocalStore::queryPathInfo(const Path & path)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					unsigned long long LocalStore::queryValidPathId(const Path & path)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    SQLiteStmtUse use(stmtQueryPathInfo);
 | 
				
			||||||
 | 
					    stmtQueryPathInfo.bind(path);
 | 
				
			||||||
 | 
					    int res = sqlite3_step(stmtQueryPathInfo);
 | 
				
			||||||
 | 
					    if (res == SQLITE_ROW) return sqlite3_column_int(stmtQueryPathInfo, 0);
 | 
				
			||||||
 | 
					    if (res == SQLITE_DONE) throw Error(format("path `%1%' is not valid") % path);
 | 
				
			||||||
 | 
					    throw SQLiteError(db, "querying path in database");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool LocalStore::isValidPath(const Path & path)
 | 
					bool LocalStore::isValidPath(const Path & path)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    SQLiteStmtUse use(stmtQueryPathInfo);
 | 
					    SQLiteStmtUse use(stmtQueryPathInfo);
 | 
				
			||||||
| 
						 | 
					@ -644,7 +653,7 @@ PathSet LocalStore::queryDerivationOutputs(const Path & path)
 | 
				
			||||||
    SQLiteTxn txn(db);
 | 
					    SQLiteTxn txn(db);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    SQLiteStmtUse use(stmtQueryDerivationOutputs);
 | 
					    SQLiteStmtUse use(stmtQueryDerivationOutputs);
 | 
				
			||||||
    stmtQueryDerivationOutputs.bind(queryPathInfo(path).id);
 | 
					    stmtQueryDerivationOutputs.bind(queryValidPathId(path));
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    PathSet outputs;
 | 
					    PathSet outputs;
 | 
				
			||||||
    int r;
 | 
					    int r;
 | 
				
			||||||
| 
						 | 
					@ -778,9 +787,9 @@ void LocalStore::registerValidPaths(const ValidPathInfos & infos)
 | 
				
			||||||
    foreach (ValidPathInfos::const_iterator, i, infos) addValidPath(*i);
 | 
					    foreach (ValidPathInfos::const_iterator, i, infos) addValidPath(*i);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    foreach (ValidPathInfos::const_iterator, i, infos) {
 | 
					    foreach (ValidPathInfos::const_iterator, i, infos) {
 | 
				
			||||||
        unsigned long long referrer = queryPathInfo(i->path).id;
 | 
					        unsigned long long referrer = queryValidPathId(i->path);
 | 
				
			||||||
        foreach (PathSet::iterator, j, i->references)
 | 
					        foreach (PathSet::iterator, j, i->references)
 | 
				
			||||||
            addReference(referrer, queryPathInfo(*j).id);
 | 
					            addReference(referrer, queryValidPathId(*j));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    txn.commit();
 | 
					    txn.commit();
 | 
				
			||||||
| 
						 | 
					@ -1229,11 +1238,8 @@ void LocalStore::upgradeStore6()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    SQLiteTxn txn(db);
 | 
					    SQLiteTxn txn(db);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    std::map<Path, sqlite3_int64> pathToId;
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    foreach (PathSet::iterator, i, validPaths) {
 | 
					    foreach (PathSet::iterator, i, validPaths) {
 | 
				
			||||||
        ValidPathInfo info = queryPathInfoOld(*i);
 | 
					        addValidPath(queryPathInfoOld(*i));
 | 
				
			||||||
        pathToId[*i] = addValidPath(info);
 | 
					 | 
				
			||||||
        std::cerr << ".";
 | 
					        std::cerr << ".";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1241,11 +1247,9 @@ void LocalStore::upgradeStore6()
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    foreach (PathSet::iterator, i, validPaths) {
 | 
					    foreach (PathSet::iterator, i, validPaths) {
 | 
				
			||||||
        ValidPathInfo info = queryPathInfoOld(*i);
 | 
					        ValidPathInfo info = queryPathInfoOld(*i);
 | 
				
			||||||
        foreach (PathSet::iterator, j, info.references) {
 | 
					        unsigned long long referrer = queryValidPathId(*i);
 | 
				
			||||||
            if (pathToId.find(*j) == pathToId.end())
 | 
					        foreach (PathSet::iterator, j, info.references)
 | 
				
			||||||
                throw Error(format("path `%1%' referenced by `%2%' is invalid") % *j % *i);
 | 
					            addReference(referrer, queryValidPathId(*j));
 | 
				
			||||||
            addReference(pathToId[*i], pathToId[*j]);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        std::cerr << ".";
 | 
					        std::cerr << ".";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -213,6 +213,8 @@ private:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void prepareStatements();
 | 
					    void prepareStatements();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    unsigned long long queryValidPathId(const Path & path);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    unsigned long long addValidPath(const ValidPathInfo & info);
 | 
					    unsigned long long addValidPath(const ValidPathInfo & info);
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
    void addReference(unsigned long long referrer, unsigned long long reference);
 | 
					    void addReference(unsigned long long referrer, unsigned long long reference);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue