From 6ae914ceb99aaeba3c69a4b9efe839f1c6e9932b Mon Sep 17 00:00:00 2001 From: randomdan Date: Mon, 3 Mar 2014 20:57:27 +0000 Subject: Adds native support for time_duration as a variable type Pass/retrieve boost::posix_time ptime and time_duration into/out of the db tier --- project2/common/fileStrmVarWriter.cpp | 3 +++ project2/common/fileStrmVarWriter.h | 1 + project2/common/variableConvert.cpp | 40 ++++++++++++++++++++++++++++++++ project2/common/variableType.cpp | 21 ++++++++++++----- project2/common/variableType.h | 4 ++++ project2/json/conversion.cpp | 3 +++ project2/json/conversion.h | 1 + project2/sql/sqlCache.cpp | 7 +++--- project2/sql/sqlHandleAsVariableType.cpp | 7 ++++-- project2/sql/sqlHandleAsVariableType.h | 3 ++- project2/sql/sqlTest.cpp | 7 ++++-- project2/sql/sqlVariableBinder.cpp | 8 +++++-- project2/sql/sqlVariableBinder.h | 1 + project2/xml/xmlPresenter.cpp | 7 ++++++ project2/xml/xmlPresenter.h | 1 + 15 files changed, 98 insertions(+), 16 deletions(-) diff --git a/project2/common/fileStrmVarWriter.cpp b/project2/common/fileStrmVarWriter.cpp index caaf908..cdd7818 100644 --- a/project2/common/fileStrmVarWriter.cpp +++ b/project2/common/fileStrmVarWriter.cpp @@ -38,6 +38,9 @@ void FileStreamVariableWriter::operator()(const Glib::ustring & i) const { } fputc('\'', out); } +void FileStreamVariableWriter::operator()(const boost::posix_time::time_duration & i) const { + fprintf(out, "[%s]", boost::posix_time::to_simple_string(i).c_str()); +} void FileStreamVariableWriter::operator()(const boost::posix_time::ptime & i) const { fprintf(out, "[%s]", boost::posix_time::to_iso_extended_string(i).c_str()); } diff --git a/project2/common/fileStrmVarWriter.h b/project2/common/fileStrmVarWriter.h index d0fb76f..dd43473 100644 --- a/project2/common/fileStrmVarWriter.h +++ b/project2/common/fileStrmVarWriter.h @@ -13,6 +13,7 @@ class FileStreamVariableWriter : public boost::static_visitor<> { void operator()(const double & i) const; void operator()(const Boolean & i) const; void operator()(const Glib::ustring & i) const; + void operator()(const boost::posix_time::time_duration & i) const; void operator()(const boost::posix_time::ptime & i) const; private: diff --git a/project2/common/variableConvert.cpp b/project2/common/variableConvert.cpp index 737a856..2c6e49a 100644 --- a/project2/common/variableConvert.cpp +++ b/project2/common/variableConvert.cpp @@ -29,6 +29,9 @@ class ConvertVisitorGlibUstring : public boost::static_visitor { const char * operator()(const Glib::ustring & r) const { return r.c_str(); } + const char * operator()(const boost::posix_time::time_duration & r) const { + CONVERTF(const Glib::ustring, boost::posix_time::to_simple_string, c_str); + } const char * operator()(const boost::posix_time::ptime & r) const { CONVERTF(const Glib::ustring, boost::posix_time::to_iso_extended_string, c_str); } @@ -93,6 +102,9 @@ class ConvertVisitor : public boost::static_visitor { DestType operator()(const Glib::ustring & r) const { CONVERT(DestType, boost::lexical_cast); } + DestType operator()(const boost::posix_time::time_duration &) const { + throw InvalidConversionTo(typeid(DestType).name(), "