equal
deleted
inserted
replaced
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 { |