void ConceptDatabase::AddConnectionToConcept(const CommonTool::DBRow& row, shared_ptr<Concept> concept) { if (!row.HasColumn(NonBaseConceptField::Connection)) return; auto connectionStr = row.GetText(NonBaseConceptField::Connection); auto connectionIDs = SplitString(connectionStr, ' ');//There may be many connections. for (auto id : connectionIDs) { //There must be only one row. auto row = GetRow(id, ConceptConnectionField::ConnectionID,ConceptConnectionTable); //Get 'to concept'. auto to_conceptID = row.GetText(ConceptConnectionField::ToConcept); auto toConceptRow = GetRowInConceptTables(to_conceptID); auto to_ID = toConceptRow.GetLong(NonBaseConceptField::ID); auto to_Word = toConceptRow.GetText(NonBaseConceptField::Word); //Recursively get toConcept as it may depend on other concepts. //Recursion will stop when the current concept is a base concept which depends nothing. auto to_Concept = GetConcept(to_Word, to_ID); concept->AddForwardConcept(to_Concept); //Add modification. auto modStr = row.GetText(ConceptConnectionField::Modification); if (modStr != "") { auto modTable = ConvertModStringToConceptTable(modStr); concept->AddForwardModification(to_Concept, modTable); } } }