src/GuileHandler.h
branchv_0
changeset 14 82bd0f57a889
parent 13 c9fece435aa2
child 15 051e58022783
equal deleted inserted replaced
13:c9fece435aa2 14:82bd0f57a889
   188 		if (currentRelationConfiguration) {
   188 		if (currentRelationConfiguration) {
   189 			evalGuileCode(currentRelationConfiguration->guileAfterRecords);
   189 			evalGuileCode(currentRelationConfiguration->guileAfterRecords);
   190 			for (DefinitionRecipe definition : currentRelationConfiguration->definitions) undefineGuileVariable(definition.name);
   190 			for (DefinitionRecipe definition : currentRelationConfiguration->definitions) undefineGuileVariable(definition.name);
   191 		}
   191 		}
   192 		for (auto attribute : currentReaderMetadata) undefineGuileVariable(attribute.getAttributeName());
   192 		for (auto attribute : currentReaderMetadata) undefineGuileVariable(attribute.getAttributeName());
   193 		
   193 
   194 		for (DefinitionRecipe definition : configuration.definitions) defineGuileVariable(definition);
   194 		for (DefinitionRecipe definition : configuration.definitions) defineGuileVariable(definition);
   195 
   195 
   196 		currentRelationConfiguration = nullptr;
   196 		currentRelationConfiguration = nullptr;
   197 		for (int i = 0; i < configuration.relationConfigurations.size(); i++) {
   197 		for (int i = 0; i < configuration.relationConfigurations.size(); i++) {
   198 			if (regex_match(name, wregex(configuration.relationConfigurations[i].relation))) {
   198 			if (regex_match(name, wregex(configuration.relationConfigurations[i].relation))) {
   209 			currentWriterMetadata = currentRelationConfiguration->writerMetadata;
   209 			currentWriterMetadata = currentRelationConfiguration->writerMetadata;
   210 		} else {
   210 		} else {
   211 			for (AttributeMetadata readerMetadata : attributes) currentWriterMetadata.push_back({readerMetadata.getAttributeName(), relationalWriter->toTypeId(readerMetadata.getTypeName())});
   211 			for (AttributeMetadata readerMetadata : attributes) currentWriterMetadata.push_back({readerMetadata.getAttributeName(), relationalWriter->toTypeId(readerMetadata.getTypeName())});
   212 		}
   212 		}
   213 
   213 
   214 		relationalWriter->startRelation(name, currentWriterMetadata, true);
   214 		if (!currentRelationConfiguration || !currentRelationConfiguration->drop) relationalWriter->startRelation(name, currentWriterMetadata, true);
   215 
   215 
   216 		if (currentRelationConfiguration) {
   216 		if (currentRelationConfiguration) {
   217 			// TODO: better variable name, object, function?
   217 			// TODO: better variable name, object, function?
   218 			defineGuileVariable(L"relpipe-relation-name", &name, typeid (name), TypeId::STRING);
   218 			defineGuileVariable(L"relpipe-relation-name", &name, typeid (name), TypeId::STRING);
   219 			evalGuileCode(currentRelationConfiguration->guileBeforeRecords);
   219 			evalGuileCode(currentRelationConfiguration->guileBeforeRecords);
   228 
   228 
   229 			// TODO: > 0 ?:
   229 			// TODO: > 0 ?:
   230 			if (currentAttributeIndex > 0 && currentAttributeIndex % currentReaderMetadata.size() == 0) {
   230 			if (currentAttributeIndex > 0 && currentAttributeIndex % currentReaderMetadata.size() == 0) {
   231 				evalGuileCode(currentRelationConfiguration->guileForEach);
   231 				evalGuileCode(currentRelationConfiguration->guileForEach);
   232 				includeCurrentRecord = scm_to_bool(evalGuileCode(currentRelationConfiguration->guileWhere, SCM_BOOL_T));
   232 				includeCurrentRecord = scm_to_bool(evalGuileCode(currentRelationConfiguration->guileWhere, SCM_BOOL_T));
   233 				if (includeCurrentRecord) for (auto attribute : currentWriterMetadata) writeGuileValueToAttribute(attribute);
   233 				if (includeCurrentRecord && !currentRelationConfiguration->drop) for (auto attribute : currentWriterMetadata) writeGuileValueToAttribute(attribute);
   234 				includeCurrentRecord = false;
   234 				includeCurrentRecord = false;
   235 			}
   235 			}
   236 
   236 
   237 			currentAttributeIndex = currentAttributeIndex % currentReaderMetadata.size();
   237 			currentAttributeIndex = currentAttributeIndex % currentReaderMetadata.size();
   238 		} else {
   238 		} else {