--- a/src/YAMLCommand.h Sat Dec 05 19:32:05 2020 +0100
+++ b/src/YAMLCommand.h Sat Dec 05 19:42:21 2020 +0100
@@ -32,6 +32,9 @@
class YAMLCommand {
private:
+ using string_t = relpipe::writer::string_t;
+ using RelpipeWriterException = relpipe::writer::RelpipeWriterException;
+
std::wstring_convert<codecvt_utf8<wchar_t>> convertor; // YAML strings are in UTF-8
class YAMLEvent {
@@ -50,12 +53,12 @@
return event.type;
}
- const relpipe::writer::string_t getTypeName() const {
+ const string_t getTypeName() const {
return findTypeName(event.type);
}
/** Just for debugging and error handling */
- static const relpipe::writer::string_t findTypeName(const yaml_event_type_t eventType) {
+ static const string_t findTypeName(const yaml_event_type_t eventType) {
if (eventType == YAML_NO_EVENT) return L"NO";
else if (eventType == YAML_STREAM_START_EVENT) return L"STREAM_START";
else if (eventType == YAML_STREAM_END_EVENT) return L"STREAM_END";
@@ -119,30 +122,30 @@
YAMLParser parser;
std::shared_ptr<relpipe::writer::RelationalWriter> writer;
- relpipe::writer::string_t relationName;
- std::vector<relpipe::writer::string_t> record;
+ string_t relationName;
+ std::vector<string_t> record;
std::vector<relpipe::writer::AttributeMetadata> attributesMetadata;
- relpipe::writer::string_t y2s(const yaml_char_t* value) {
+ string_t y2s(const yaml_char_t* value) {
return value ? convertor.from_bytes((const char*) value) : L"";
}
- relpipe::writer::string_t fetchScalarValue(YAMLEvent_p event) {
+ string_t fetchScalarValue(YAMLEvent_p event) {
if (event->getType() == YAML_SCALAR_EVENT) return y2s(event->getEvent()->data.scalar.value);
- else throw relpipe::writer::RelpipeWriterException(L"Invalid YAML structure: expected SCALAR but got: " + event->getTypeName());
+ else throw RelpipeWriterException(L"Invalid YAML structure: expected SCALAR but got: " + event->getTypeName());
}
- void consumeEvent(const yaml_event_type_t expectedEventType, relpipe::writer::string_t expectedScalarValue = L"") {
+ void consumeEvent(const yaml_event_type_t expectedEventType, string_t expectedScalarValue = L"") {
YAMLEvent_p event = YAMLEvent_p(parser.next());
- if (!event) throw relpipe::writer::RelpipeWriterException(L"Invalid YAML structure: missing event: " + YAMLEvent::findTypeName(expectedEventType));
- if (event->getType() != expectedEventType) throw relpipe::writer::RelpipeWriterException(L"Invalid YAML structure: expected event: " + YAMLEvent::findTypeName(expectedEventType) + L", but got: " + event->getTypeName());
- if (expectedEventType == YAML_SCALAR_EVENT && expectedScalarValue.size() && expectedScalarValue != fetchScalarValue(event)) throw relpipe::writer::RelpipeWriterException(L"Invalid YAML structure: expected scalar value: " + expectedScalarValue + L", but got " + fetchScalarValue(event));
+ if (!event) throw RelpipeWriterException(L"Invalid YAML structure: missing event: " + YAMLEvent::findTypeName(expectedEventType));
+ if (event->getType() != expectedEventType) throw RelpipeWriterException(L"Invalid YAML structure: expected event: " + YAMLEvent::findTypeName(expectedEventType) + L", but got: " + event->getTypeName());
+ 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));
}
- relpipe::writer::string_t consumeScalarEvent() {
+ string_t consumeScalarEvent() {
YAMLEvent_p event = YAMLEvent_p(parser.next());
if (event && event->getType() == YAML_SCALAR_EVENT) return fetchScalarValue(event);
- else throw relpipe::writer::RelpipeWriterException(L"Invalid YAML structure: expected SCALAR, but got: " + event->getTypeName());
+ else throw RelpipeWriterException(L"Invalid YAML structure: expected SCALAR, but got: " + event->getTypeName());
}
bool until(const yaml_event_type_t until, YAMLEvent_p& event) {
@@ -154,7 +157,7 @@
YAMLEvent_p event = YAMLEvent_p(parser.next());
if (event->getType() == YAML_MAPPING_START_EVENT) processRelationWithMetadata();
else if (event->getType() == YAML_SEQUENCE_START_EVENT)processRelationWithoutMetadata();
- else throw relpipe::writer::RelpipeWriterException(L"Invalid YAML structure: expected MAPPING or SEQUENCE, but got: " + event->getTypeName());
+ else throw RelpipeWriterException(L"Invalid YAML structure: expected MAPPING or SEQUENCE, but got: " + event->getTypeName());
}
void processRelationWithMetadata() {
@@ -162,9 +165,9 @@
consumeEvent(YAML_SEQUENCE_START_EVENT);
for (YAMLEvent_p event; until(YAML_SEQUENCE_END_EVENT, event);) {
- if (event->getType() != YAML_MAPPING_START_EVENT) throw relpipe::writer::RelpipeWriterException(L"Invalid YAML structure: expected MAPPING (attribute-metadata), but got: " + event->getTypeName());
- relpipe::writer::string_t name;
- relpipe::writer::string_t type = L"string";
+ if (event->getType() != YAML_MAPPING_START_EVENT) throw RelpipeWriterException(L"Invalid YAML structure: expected MAPPING (attribute-metadata), but got: " + event->getTypeName());
+ string_t name;
+ string_t type = L"string";
for (YAMLEvent_p event; until(YAML_MAPPING_END_EVENT, event);) {
auto key = fetchScalarValue(event);
auto value = consumeScalarEvent();
@@ -185,7 +188,7 @@
} else if (event->getType() == YAML_MAPPING_END_EVENT) {
// empty relation, no records
} else {
- relpipe::writer::RelpipeWriterException(L"Invalid YAML structure: expected 'record' or MAPPING_END, but got: " + event->getTypeName());
+ RelpipeWriterException(L"Invalid YAML structure: expected 'record' or MAPPING_END, but got: " + event->getTypeName());
}
}
@@ -208,7 +211,7 @@
void processRecords() {
for (YAMLEvent_p event; until(YAML_SEQUENCE_END_EVENT, event);) {
- if (event->getType() != YAML_MAPPING_START_EVENT) throw relpipe::writer::RelpipeWriterException(L"Invalid YAML structure: expected MAPPING (record), but got: " + event->getTypeName());
+ if (event->getType() != YAML_MAPPING_START_EVENT) throw RelpipeWriterException(L"Invalid YAML structure: expected MAPPING (record), but got: " + event->getTypeName());
record.clear();
record.resize(attributesMetadata.size());
for (YAMLEvent_p event; until(YAML_MAPPING_END_EVENT, event);) {