Showing the changes to Source/Libraries/TimeSeriesPlatformLibrary/Data/DataSet.cpp (1 of 9 files). Show all
Unified · Split
| @@ -148,12 +148,15 @@ DataSetPtr DataSet::ParseXmlDataSet(const vector<uint8_t>& xmlDataSet) · 147 unmodified lines | ||
| 148 | 148 | if (!StartsWith(schemaNode.name(), schemaPrefix, false)) |
| 149 | 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 | 153 | if (!extSchemaDataPrefix.empty()) |
| 154 | + { | |
| 154 | 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 | 161 | // Find element node |
| 159 | 162 | xml_node elementNode; |
| @@ -272,21 +275,31 @@ DataSetPtr DataSet::ParseXmlDataSet(const vector<uint8_t>& xmlDataSet) · 112 unmodified lines | ||
| 272 | 275 | if (StartsWith(typeName, schemaPrefix)) |
| 273 | 276 | typeName = typeName.substr(schemaPrefix.size()); |
| 274 | 277 | |
| 275 | − string extDataTypeName{}; | |
| 278 | + string extDataType{}; | |
| 276 | 279 | |
| 277 | 280 | if (!extDataTypeAttributeName.empty()) |
| 278 | 281 | { |
| 279 | 282 | extDataTypeAttribute = node.attribute(extDataTypeAttributeName.c_str()); |
| 280 | 283 | |
| 281 | 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 | 298 | DataType columnDataType; |
| 286 | 299 | |
| 287 | 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 | 303 | columnDataType = DataType::Guid; |
| 291 | 304 | else |
| 292 | 305 | columnDataType = DataType::String; |
| @@ -351,7 +364,7 @@ DataSetPtr DataSet::ParseXmlDataSet(const vector<uint8_t>& xmlDataSet) · 58 unmodified lines | ||
| 351 | 364 | } |
| 352 | 365 | |
| 353 | 366 | // Create column |
| 354 | − const DataColumnPtr dataColumn = dataTable->CreateColumn(columnName, columnDataType); | |
| 367 | + const DataColumnPtr dataColumn = dataTable->CreateColumn(columnName, columnDataType, columnExpression); | |
| 355 | 368 | dataTable->AddColumn(dataColumn); |
| 356 | 369 | } |
| 357 | 370 | |
| @@ -389,7 +402,7 @@ DataSetPtr DataSet::ParseXmlDataSet(const vector<uint8_t>& xmlDataSet) · 31 unmodified lines | ||
| 389 | 402 | break; |
| 390 | 403 | case DataType::DateTime: |
| 391 | 404 | if (value.empty()) |
| 392 | − dataRow->SetNullValue(index); | |
| 405 | + dataRow->SetDateTimeValue(index, Empty::DateTime); | |
| 393 | 406 | else |
| 394 | 407 | dataRow->SetDateTimeValue(index, ParseTimestamp(value.as_string())); |
| 395 | 408 | break; |
| @@ -407,7 +420,7 @@ DataSetPtr DataSet::ParseXmlDataSet(const vector<uint8_t>& xmlDataSet) · 11 unmodified lines | ||
| 407 | 420 | break; |
| 408 | 421 | case DataType::Guid: |
| 409 | 422 | if (value.empty()) |
| 410 | − dataRow->SetNullValue(index); | |
| 423 | + dataRow->SetGuidValue(index, Empty::Guid); | |
| 411 | 424 | else |
| 412 | 425 | dataRow->SetGuidValue(index, ParseGuid(value.as_string())); |
| 413 | 426 | break; |