Showing the changes to Source/Libraries/TimeSeriesPlatformLibrary/Data/DataRow.cpp (1 of 2 files). Show all
Unified · Split
| @@ -328,10 +328,10 @@ Object DataRow::GetComputedValue(const DataColumnPtr& column, DataType targetTyp · 327 unmodified lines | |||
| 328 | case DataType::String: | 328 | case DataType::String: |
| 329 | return value; | 329 | return value; |
| 330 | case DataType::Boolean: | 330 | case DataType::Boolean: |
| 331 | if (IsEqual(value, "true") || IsEqual(value, "1")) | 331 | if (IsEqual(value, "true") || IsEqual(value, "1", false)) |
| 332 | return true; | 332 | return true; |
| 333 | 333 | ||
| 334 | if (IsEqual(value, "false") || IsEqual(value, "0")) | 334 | if (IsEqual(value, "false") || IsEqual(value, "0", false)) |
| 335 | return false; | 335 | return false; |
| 336 | 336 | ||
| 337 | throw DataSetException("Cannot convert \"String\" expression value \"" + value + "\" to \"Boolean\" column"); | 337 | throw DataSetException("Cannot convert \"String\" expression value \"" + value + "\" to \"Boolean\" column"); |
| @@ -463,6 +463,9 @@ void DataRow::SetValue(int32_t columnIndex, const Nullable<T>& value, DataType t · 125 unmodified lines | |||
| 463 | { | 463 | { |
| 464 | ValidateColumnType(columnIndex, targetType); | 464 | ValidateColumnType(columnIndex, targetType); |
| 465 | 465 | ||
| 466 | // Free any existing value on updates | ||
| 467 | free(m_values[columnIndex]); | ||
| 468 | |||
| 466 | if (value.HasValue()) | 469 | if (value.HasValue()) |
| 467 | { | 470 | { |
| 468 | uint8_t* copy = static_cast<uint8_t*>(malloc(sizeof(T))); | 471 | uint8_t* copy = static_cast<uint8_t*>(malloc(sizeof(T))); |
| @@ -571,6 +574,9 @@ void DataRow::SetStringValue(int32_t columnIndex, const Nullable<string>& value) · 102 unmodified lines | |||
| 571 | { | 574 | { |
| 572 | ValidateColumnType(columnIndex, DataType::String); | 575 | ValidateColumnType(columnIndex, DataType::String); |
| 573 | 576 | ||
| 577 | // Free any existing value on updates | ||
| 578 | free(m_values[columnIndex]); | ||
| 579 | |||
| 574 | if (value.HasValue()) | 580 | if (value.HasValue()) |
| 575 | { | 581 | { |
| 576 | const string& strval = value.GetValueOrDefault(); | 582 | const string& strval = value.GetValueOrDefault(); |
| @@ -614,6 +620,9 @@ void DataRow::SetBooleanValue(int32_t columnIndex, const Nullable<bool>& value) · 37 unmodified lines | |||
| 614 | { | 620 | { |
| 615 | ValidateColumnType(columnIndex, DataType::Boolean); | 621 | ValidateColumnType(columnIndex, DataType::Boolean); |
| 616 | 622 | ||
| 623 | // Free any existing value on updates | ||
| 624 | free(m_values[columnIndex]); | ||
| 625 | |||
| 617 | if (value.HasValue()) | 626 | if (value.HasValue()) |
| 618 | { | 627 | { |
| 619 | uint8_t* copy = static_cast<uint8_t*>(malloc(1)); | 628 | uint8_t* copy = static_cast<uint8_t*>(malloc(1)); |
| @@ -715,6 +724,9 @@ void DataRow::SetDecimalValue(int32_t columnIndex, const Nullable<decimal_t>& va · 95 unmodified lines | |||
| 715 | { | 724 | { |
| 716 | ValidateColumnType(columnIndex, DataType::Decimal); | 725 | ValidateColumnType(columnIndex, DataType::Decimal); |
| 717 | 726 | ||
| 727 | // Free any existing value on updates | ||
| 728 | free(m_values[columnIndex]); | ||
| 729 | |||
| 718 | if (value.HasValue()) | 730 | if (value.HasValue()) |
| 719 | { | 731 | { |
| 720 | // The boost decimal type has a very complex internal representation, | 732 | // The boost decimal type has a very complex internal representation, |
| @@ -764,6 +776,9 @@ void DataRow::SetGuidValue(int32_t columnIndex, const Nullable<GSF::Guid>& value · 43 unmodified lines | |||
| 764 | { | 776 | { |
| 765 | ValidateColumnType(columnIndex, DataType::Guid); | 777 | ValidateColumnType(columnIndex, DataType::Guid); |
| 766 | 778 | ||
| 779 | // Free any existing value on updates | ||
| 780 | free(m_values[columnIndex]); | ||
| 781 | |||
| 767 | if (value.HasValue()) | 782 | if (value.HasValue()) |
| 768 | { | 783 | { |
| 769 | int8_t* copy = static_cast<int8_t*>(malloc(16)); | 784 | int8_t* copy = static_cast<int8_t*>(malloc(16)); |