equal
deleted
inserted
replaced
137 |
137 |
138 void consumeEvent(const yaml_event_type_t expectedEventType, string_t expectedScalarValue = L"") { |
138 void consumeEvent(const yaml_event_type_t expectedEventType, string_t expectedScalarValue = L"") { |
139 YAMLEvent_p event = YAMLEvent_p(parser.next()); |
139 YAMLEvent_p event = YAMLEvent_p(parser.next()); |
140 if (!event) throw RelpipeWriterException(L"Invalid YAML structure: missing event: " + YAMLEvent::findTypeName(expectedEventType)); |
140 if (!event) throw RelpipeWriterException(L"Invalid YAML structure: missing event: " + YAMLEvent::findTypeName(expectedEventType)); |
141 if (event->getType() != expectedEventType) throw RelpipeWriterException(L"Invalid YAML structure: expected event: " + YAMLEvent::findTypeName(expectedEventType) + L", but got: " + event->getTypeName()); |
141 if (event->getType() != expectedEventType) throw RelpipeWriterException(L"Invalid YAML structure: expected event: " + YAMLEvent::findTypeName(expectedEventType) + L", but got: " + event->getTypeName()); |
142 if (expectedEventType == YAML_SCALAR_EVENT && expectedScalarValue.size() && expectedScalarValue != fetchScalarValue(event)) throw RelpipeWriterException(L"Invalid YAML structure: expected scalar value: " + expectedScalarValue + L", but got " + fetchScalarValue(event)); |
142 if (expectedEventType == YAML_SCALAR_EVENT && expectedScalarValue.size() && expectedScalarValue != fetchScalarValue(event)) throw RelpipeWriterException(L"Invalid YAML structure: expected scalar value: „" + expectedScalarValue + L"“, but got „" + fetchScalarValue(event) + L"“"); |
143 } |
143 } |
144 |
144 |
145 string_t consumeScalarEvent() { |
145 string_t consumeScalarEvent() { |
146 YAMLEvent_p event = YAMLEvent_p(parser.next()); |
146 YAMLEvent_p event = YAMLEvent_p(parser.next()); |
147 if (event && event->getType() == YAML_SCALAR_EVENT) return fetchScalarValue(event); |
147 if (event && event->getType() == YAML_SCALAR_EVENT) return fetchScalarValue(event); |
171 for (YAMLEvent_p event; until(YAML_MAPPING_END_EVENT, event);) { |
171 for (YAMLEvent_p event; until(YAML_MAPPING_END_EVENT, event);) { |
172 auto key = fetchScalarValue(event); |
172 auto key = fetchScalarValue(event); |
173 auto value = consumeScalarEvent(); |
173 auto value = consumeScalarEvent(); |
174 if (key == L"name") name = value; |
174 if (key == L"name") name = value; |
175 else if (key == L"type") type = value; |
175 else if (key == L"type") type = value; |
176 else; // unsupported metadata, later there might be something useful |
176 else throw RelpipeWriterException(L"Invalid YAML structure: expected „name“ or „type“ but got: " + key); |
177 } |
177 } |
178 attributesMetadata.push_back({name, writer->toTypeId(type)}); |
178 attributesMetadata.push_back({name, writer->toTypeId(type)}); |
179 } |
179 } |
180 |
180 |
181 writer->startRelation(relationName, attributesMetadata, true); |
181 writer->startRelation(relationName, attributesMetadata, true); |
186 processRecords(); |
186 processRecords(); |
187 consumeEvent(YAML_MAPPING_END_EVENT); |
187 consumeEvent(YAML_MAPPING_END_EVENT); |
188 } else if (event->getType() == YAML_MAPPING_END_EVENT) { |
188 } else if (event->getType() == YAML_MAPPING_END_EVENT) { |
189 // empty relation, no records |
189 // empty relation, no records |
190 } else { |
190 } else { |
191 RelpipeWriterException(L"Invalid YAML structure: expected 'record' or MAPPING_END, but got: " + event->getTypeName()); |
191 RelpipeWriterException(L"Invalid YAML structure: expected „record“ or MAPPING_END, but got: " + event->getTypeName()); |
192 } |
192 } |
193 } |
193 } |
194 |
194 |
195 void processRelationWithoutMetadata() { |
195 void processRelationWithoutMetadata() { |
196 // First record: |
196 // First record: |