示例#1
0
	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);
			}
		}
		
	}