DBDriver: added ignoreBadSignatures param to getAllNodeIds()

This commit is contained in:
matlabbe
2015-10-28 16:50:18 -04:00
parent f97dd2b05b
commit f561a59a09
5 changed files with 30 additions and 16 deletions
+2 -2
View File
@@ -122,7 +122,7 @@ public:
bool getNodeInfo(int signatureId, Transform & pose, int & mapId, int & weight, std::string & label, double & stamp) const;
void loadLinks(int signatureId, std::map<int, Link> & links, Link::Type type = Link::kUndef) const;
void getWeight(int signatureId, int & weight) const;
void getAllNodeIds(std::set<int> & ids, bool ignoreChildren = false) const;
void getAllNodeIds(std::set<int> & ids, bool ignoreChildren = false, bool ignoreBadSignatures = false) const;
void getAllLinks(std::multimap<int, Link> & links, bool ignoreNullLinks = true) const;
void getLastNodeId(int & id) const;
void getLastWordId(int & id) const;
@@ -170,7 +170,7 @@ private:
virtual void loadNodeDataQuery(std::list<Signature *> & signatures) const = 0;
virtual bool getNodeInfoQuery(int signatureId, Transform & pose, int & mapId, int & weight, std::string & label, double & stamp) const = 0;
virtual void getAllNodeIdsQuery(std::set<int> & ids, bool ignoreChildren) const = 0;
virtual void getAllNodeIdsQuery(std::set<int> & ids, bool ignoreChildren, bool ignoreBadSignatures) const = 0;
virtual void getAllLinksQuery(std::multimap<int, Link> & links, bool ignoreNullLinks) const = 0;
virtual void getLastIdQuery(const std::string & tableName, int & id) const = 0;
virtual void getInvertedIndexNiQuery(int signatureId, int & ni) const = 0;
+2 -2
View File
@@ -627,7 +627,7 @@ void DBDriver::getWeight(int signatureId, int & weight) const
}
}
void DBDriver::getAllNodeIds(std::set<int> & ids, bool ignoreChildren) const
void DBDriver::getAllNodeIds(std::set<int> & ids, bool ignoreChildren, bool ignoreBadSignatures) const
{
// look in the trash
_trashesMutex.lock();
@@ -662,7 +662,7 @@ void DBDriver::getAllNodeIds(std::set<int> & ids, bool ignoreChildren) const
_trashesMutex.unlock();
_dbSafeAccessMutex.lock();
this->getAllNodeIdsQuery(ids, ignoreChildren);
this->getAllNodeIdsQuery(ids, ignoreChildren, ignoreBadSignatures);
_dbSafeAccessMutex.unlock();
}
+9 -11
View File
@@ -1062,7 +1062,7 @@ bool DBDriverSqlite3::getNodeInfoQuery(int signatureId,
}
void DBDriverSqlite3::getAllNodeIdsQuery(std::set<int> & ids, bool ignoreChildren) const
void DBDriverSqlite3::getAllNodeIdsQuery(std::set<int> & ids, bool ignoreChildren, bool ignoreBadSignatures) const
{
if(_ppDb)
{
@@ -1072,20 +1072,18 @@ void DBDriverSqlite3::getAllNodeIdsQuery(std::set<int> & ids, bool ignoreChildre
sqlite3_stmt * ppStmt = 0;
std::stringstream query;
if(!ignoreChildren)
query << "SELECT DISTINCT id "
<< "FROM Node ";
if(ignoreChildren)
{
query << "SELECT id "
<< "FROM Node "
<< "ORDER BY id";
query << "INNER JOIN Link "
<< "ON id = to_id "; // use to_id to ignore all children (which don't have link pointing on them)
}
else
if(ignoreBadSignatures)
{
query << "SELECT id "
<< "FROM Node "
<< "INNER JOIN Link "
<< "ON id = to_id " // use to_id to ignore all children (which don't have link pointing on them)
<< "ORDER BY id";
query << "WHERE id in (select node_id from Map_Node_Word) ";
}
query << "ORDER BY id";
rc = sqlite3_prepare_v2(_ppDb, query.str().c_str(), -1, &ppStmt, 0);
UASSERT_MSG(rc == SQLITE_OK, uFormat("DB error: %s", sqlite3_errmsg(_ppDb)).c_str());
+1 -1
View File
@@ -85,7 +85,7 @@ private:
virtual void loadNodeDataQuery(std::list<Signature *> & signatures) const;
virtual bool getNodeInfoQuery(int signatureId, Transform & pose, int & mapId, int & weight, std::string & label, double & stamp) const;
virtual void getAllNodeIdsQuery(std::set<int> & ids, bool ignoreChildren) const;
virtual void getAllNodeIdsQuery(std::set<int> & ids, bool ignoreChildren, bool ignoreBadSignatures) const;
virtual void getAllLinksQuery(std::multimap<int, Link> & links, bool ignoreNullLinks) const;
virtual void getLastIdQuery(const std::string & tableName, int & id) const;
virtual void getInvertedIndexNiQuery(int signatureId, int & ni) const;