History

TimeSeriesPlatformLibrary: Updated DataSet XML parser to properly pickup columns that have an expression defined in the schema.

J. Ritchie Carroll committed 7 years ago

Commit 52ae5c61 parent a5c76019 files · +44 −20Browse files

Showing the changes to Source/Libraries/TimeSeriesPlatformLibrary/Data/DataSet.cpp (1 of 9 files). Show all

Unified · Split

Source/Libraries/TimeSeriesPlatformLibrary/Data/DataSet.cpp+21−8
@@ -148,12 +148,15 @@ DataSetPtr DataSet::ParseXmlDataSet(const vector<uint8_t>& xmlDataSet) · 147 unmodified lines
148148 if (!StartsWith(schemaNode.name(), schemaPrefix, false))
149149 throw DataSetException("Failed to parse dataset XML: schema node \"" + string(schemaNode.name()) + "\" prefix is not \"" + schemaPrefix + "\"");
150150
151− string extDataTypeAttributeName{};
151+ string extDataTypeAttributeName{}, extExpressionAttributeName{};
152152
153153 if (!extSchemaDataPrefix.empty())
154+ {
154155 extDataTypeAttributeName = extSchemaDataPrefix + "DataType";
156+ extExpressionAttributeName = extSchemaDataPrefix + "Expression";
157+ }
155158
156− xml_attribute nameAttribute, typeAttribute, extDataTypeAttribute;
159+ xml_attribute nameAttribute, typeAttribute, extDataTypeAttribute, extExpressionAttribute;
157160
158161 // Find element node
159162 xml_node elementNode;
@@ -272,21 +275,31 @@ DataSetPtr DataSet::ParseXmlDataSet(const vector<uint8_t>& xmlDataSet) · 112 unmodified lines
272275 if (StartsWith(typeName, schemaPrefix))
273276 typeName = typeName.substr(schemaPrefix.size());
274277
275− string extDataTypeName{};
278+ string extDataType{};
276279
277280 if (!extDataTypeAttributeName.empty())
278281 {
279282 extDataTypeAttribute = node.attribute(extDataTypeAttributeName.c_str());
280283
281284 if (extDataTypeAttribute)
282− extDataTypeName = extDataTypeAttribute.value();
285+ extDataType = extDataTypeAttribute.value();
286+ }
287+
288+ string columnExpression{};
289+
290+ if (!extExpressionAttributeName.empty())
291+ {
292+ extExpressionAttribute = node.attribute(extExpressionAttributeName.c_str());
293+
294+ if (extExpressionAttribute)
295+ columnExpression = extExpressionAttribute.value();
283296 }
284297
285298 DataType columnDataType;
286299
287300 if (IsEqual(typeName, "string", false))
288301 {
289− if (!extDataTypeName.empty() && StartsWith(extDataTypeName, "System.Guid", false))
302+ if (!extDataType.empty() && StartsWith(extDataType, "System.Guid", false))
290303 columnDataType = DataType::Guid;
291304 else
292305 columnDataType = DataType::String;
@@ -351,7 +364,7 @@ DataSetPtr DataSet::ParseXmlDataSet(const vector<uint8_t>& xmlDataSet) · 58 unmodified lines
351364 }
352365
353366 // Create column
354− const DataColumnPtr dataColumn = dataTable->CreateColumn(columnName, columnDataType);
367+ const DataColumnPtr dataColumn = dataTable->CreateColumn(columnName, columnDataType, columnExpression);
355368 dataTable->AddColumn(dataColumn);
356369 }
357370
@@ -389,7 +402,7 @@ DataSetPtr DataSet::ParseXmlDataSet(const vector<uint8_t>& xmlDataSet) · 31 unmodified lines
389402 break;
390403 case DataType::DateTime:
391404 if (value.empty())
392− dataRow->SetNullValue(index);
405+ dataRow->SetDateTimeValue(index, Empty::DateTime);
393406 else
394407 dataRow->SetDateTimeValue(index, ParseTimestamp(value.as_string()));
395408 break;
@@ -407,7 +420,7 @@ DataSetPtr DataSet::ParseXmlDataSet(const vector<uint8_t>& xmlDataSet) · 11 unmodified lines
407420 break;
408421 case DataType::Guid:
409422 if (value.empty())
410− dataRow->SetNullValue(index);
423+ dataRow->SetGuidValue(index, Empty::Guid);
411424 else
412425 dataRow->SetGuidValue(index, ParseGuid(value.as_string()));
413426 break;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t