src/GuileHandler.h
branchv_0
changeset 12 7977c1bdba1f
parent 11 9603e64324bc
child 13 c9fece435aa2
--- 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) {