diff -r 9603e64324bc -r 7977c1bdba1f src/GuileHandler.h --- a/src/GuileHandler.h Sun Feb 03 21:53:10 2019 +0100 +++ b/src/GuileHandler.h Tue Feb 05 00:06:44 2019 +0100 @@ -190,13 +190,6 @@ for (DefinitionRecipe definition : currentRelationConfiguration->definitions) undefineGuileVariable(definition.name); } for (auto attribute : currentReaderMetadata) undefineGuileVariable(attribute.getAttributeName()); - currentReaderMetadata = attributes; - // TODO: move to a reusable method (or use same metadata on both reader and writer side?) - // TODO: allow structural changes during transformation - currentWriterMetadata.clear(); - for (AttributeMetadata readerMetadata : attributes) { - currentWriterMetadata.push_back({readerMetadata.getAttributeName(), relationalWriter->toTypeId(readerMetadata.getTypeName())}); - } currentRelationConfiguration = nullptr; for (int i = 0; i < configuration.relationConfigurations.size(); i++) { @@ -207,6 +200,15 @@ } } + currentReaderMetadata = attributes; + // TODO: move to a reusable method (or use same metadata on both reader and writer side?) + currentWriterMetadata.clear(); + if (currentRelationConfiguration && currentRelationConfiguration->writerMetadata.size()) { + currentWriterMetadata = currentRelationConfiguration->writerMetadata; + } else { + for (AttributeMetadata readerMetadata : attributes) currentWriterMetadata.push_back({readerMetadata.getAttributeName(), relationalWriter->toTypeId(readerMetadata.getTypeName())}); + } + relationalWriter->startRelation(name, currentWriterMetadata, true); if (currentRelationConfiguration) {