diff --git a/src/columns/ColTypeNumeric.cpp b/src/columns/ColTypeNumeric.cpp index 1fa4b95c7..dded90ca9 100644 --- a/src/columns/ColTypeNumeric.cpp +++ b/src/columns/ColTypeNumeric.cpp @@ -26,6 +26,16 @@ #include #include +#include +#include +#include +#include +#include +#include +#include + +extern Context context; +extern Task& contextTask; //////////////////////////////////////////////////////////////////////////////// ColumnTypeNumeric::ColumnTypeNumeric () @@ -51,7 +61,31 @@ void ColumnTypeNumeric::render ( //////////////////////////////////////////////////////////////////////////////// void ColumnTypeNumeric::modify (Task& task, const std::string& value) { - task.set (_name, value); + // Try to evaluate 'value'. It might work. + Variant evaluatedValue; + try + { + Eval e; + e.addSource (domSource); + e.addSource (namedDates); + contextTask = task; + e.evaluateInfixExpression (value, evaluatedValue); + } + + catch (...) + { + evaluatedValue = Variant (value); + } + + std::string label = " MODIFICATION "; + context.debug (label + _name + " <-- '" + evaluatedValue.get_string () + "' <-- '" + value + "'"); + + // If the result is not readily convertible to a numeric value, + // then this is an error. + if (evaluatedValue.type () == Variant::type_string) + throw format (STRING_UDA_NUMERIC, evaluatedValue.get_string ()); + + task.set (_name, evaluatedValue); } ////////////////////////////////////////////////////////////////////////////////