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 | 328 | case DataType::String: |
| 329 | 329 | return value; |
| 330 | 330 | case DataType::Boolean: |
| 331 | − if (IsEqual(value, "true") || IsEqual(value, "1")) | |
| 331 | + if (IsEqual(value, "true") || IsEqual(value, "1", false)) | |
| 332 | 332 | return true; |
| 333 | 333 | |
| 334 | − if (IsEqual(value, "false") || IsEqual(value, "0")) | |
| 334 | + if (IsEqual(value, "false") || IsEqual(value, "0", false)) | |
| 335 | 335 | return false; |
| 336 | 336 | |
| 337 | 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 | 464 | ValidateColumnType(columnIndex, targetType); |
| 465 | 465 | |
| 466 | + // Free any existing value on updates | |
| 467 | + free(m_values[columnIndex]); | |
| 468 | + | |
| 466 | 469 | if (value.HasValue()) |
| 467 | 470 | { |
| 468 | 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 | 575 | ValidateColumnType(columnIndex, DataType::String); |
| 573 | 576 | |
| 577 | + // Free any existing value on updates | |
| 578 | + free(m_values[columnIndex]); | |
| 579 | + | |
| 574 | 580 | if (value.HasValue()) |
| 575 | 581 | { |
| 576 | 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 | 621 | ValidateColumnType(columnIndex, DataType::Boolean); |
| 616 | 622 | |
| 623 | + // Free any existing value on updates | |
| 624 | + free(m_values[columnIndex]); | |
| 625 | + | |
| 617 | 626 | if (value.HasValue()) |
| 618 | 627 | { |
| 619 | 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 | 725 | ValidateColumnType(columnIndex, DataType::Decimal); |
| 717 | 726 | |
| 727 | + // Free any existing value on updates | |
| 728 | + free(m_values[columnIndex]); | |
| 729 | + | |
| 718 | 730 | if (value.HasValue()) |
| 719 | 731 | { |
| 720 | 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 | 777 | ValidateColumnType(columnIndex, DataType::Guid); |
| 766 | 778 | |
| 779 | + // Free any existing value on updates | |
| 780 | + free(m_values[columnIndex]); | |
| 781 | + | |
| 767 | 782 | if (value.HasValue()) |
| 768 | 783 | { |
| 769 | 784 | int8_t* copy = static_cast<int8_t*>(malloc(16)); |