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 | 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 node | 161 | // 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 | else | 304 | 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 | else | 406 | 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 | else | 424 | else |
| 412 | dataRow->SetGuidValue(index, ParseGuid(value.as_string())); | 425 | dataRow->SetGuidValue(index, ParseGuid(value.as_string())); |
| 413 | break; | 426 | break; |