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
148 if (!StartsWith(schemaNode.name(), schemaPrefix, false))148 if (!StartsWith(schemaNode.name(), schemaPrefix, false))
149 throw DataSetException("Failed to parse dataset XML: schema node \"" + string(schemaNode.name()) + "\" prefix is not \"" + schemaPrefix + "\"");149 throw DataSetException("Failed to parse dataset XML: schema node \"" + string(schemaNode.name()) + "\" prefix is not \"" + schemaPrefix + "\"");
150 150
151 string extDataTypeAttributeName{};151 string extDataTypeAttributeName{}, extExpressionAttributeName{};
152 152
153 if (!extSchemaDataPrefix.empty())153 if (!extSchemaDataPrefix.empty())
154 {
154 extDataTypeAttributeName = extSchemaDataPrefix + "DataType";155 extDataTypeAttributeName = extSchemaDataPrefix + "DataType";
156 extExpressionAttributeName = extSchemaDataPrefix + "Expression";
157 }
155 158
156 xml_attribute nameAttribute, typeAttribute, extDataTypeAttribute;159 xml_attribute nameAttribute, typeAttribute, extDataTypeAttribute, extExpressionAttribute;
157 160
158 // Find element node161 // Find element node
159 xml_node elementNode;162 xml_node elementNode;
@@ -272,21 +275,31 @@ DataSetPtr DataSet::ParseXmlDataSet(const vector<uint8_t>& xmlDataSet) · 112 unmodified lines
272 if (StartsWith(typeName, schemaPrefix))275 if (StartsWith(typeName, schemaPrefix))
273 typeName = typeName.substr(schemaPrefix.size());276 typeName = typeName.substr(schemaPrefix.size());
274 277
275 string extDataTypeName{};278 string extDataType{};
276 279
277 if (!extDataTypeAttributeName.empty())280 if (!extDataTypeAttributeName.empty())
278 {281 {
279 extDataTypeAttribute = node.attribute(extDataTypeAttributeName.c_str());282 extDataTypeAttribute = node.attribute(extDataTypeAttributeName.c_str());
280 283
281 if (extDataTypeAttribute)284 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();
283 }296 }
284 297
285 DataType columnDataType;298 DataType columnDataType;
286 299
287 if (IsEqual(typeName, "string", false))300 if (IsEqual(typeName, "string", false))
288 {301 {
289 if (!extDataTypeName.empty() && StartsWith(extDataTypeName, "System.Guid", false))302 if (!extDataType.empty() && StartsWith(extDataType, "System.Guid", false))
290 columnDataType = DataType::Guid;303 columnDataType = DataType::Guid;
291 else304 else
292 columnDataType = DataType::String;305 columnDataType = DataType::String;
@@ -351,7 +364,7 @@ DataSetPtr DataSet::ParseXmlDataSet(const vector<uint8_t>& xmlDataSet) · 58 unmodified lines
351 }364 }
352 365
353 // Create column 366 // Create column
354 const DataColumnPtr dataColumn = dataTable->CreateColumn(columnName, columnDataType);367 const DataColumnPtr dataColumn = dataTable->CreateColumn(columnName, columnDataType, columnExpression);
355 dataTable->AddColumn(dataColumn);368 dataTable->AddColumn(dataColumn);
356 }369 }
357 370
@@ -389,7 +402,7 @@ DataSetPtr DataSet::ParseXmlDataSet(const vector<uint8_t>& xmlDataSet) · 31 unmodified lines
389 break;402 break;
390 case DataType::DateTime:403 case DataType::DateTime:
391 if (value.empty())404 if (value.empty())
392 dataRow->SetNullValue(index);405 dataRow->SetDateTimeValue(index, Empty::DateTime);
393 else406 else
394 dataRow->SetDateTimeValue(index, ParseTimestamp(value.as_string()));407 dataRow->SetDateTimeValue(index, ParseTimestamp(value.as_string()));
395 break;408 break;
@@ -407,7 +420,7 @@ DataSetPtr DataSet::ParseXmlDataSet(const vector<uint8_t>& xmlDataSet) · 11 unmodified lines
407 break;420 break;
408 case DataType::Guid:421 case DataType::Guid:
409 if (value.empty())422 if (value.empty())
410 dataRow->SetNullValue(index);423 dataRow->SetGuidValue(index, Empty::Guid);
411 else424 else
412 dataRow->SetGuidValue(index, ParseGuid(value.as_string()));425 dataRow->SetGuidValue(index, ParseGuid(value.as_string()));
413 break;426 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