diff options
-rw-r--r-- | project2/Jamfile.jam | 14 | ||||
-rw-r--r-- | project2/cgi/FCgiIO.cpp | 5 | ||||
-rw-r--r-- | project2/console/consoleAppEngine.cpp | 6 | ||||
-rw-r--r-- | project2/console/consoleEnvironment.cpp | 4 | ||||
-rw-r--r-- | project2/fileRows.cpp | 4 | ||||
-rw-r--r-- | project2/fileStarGlibIoChannel.cpp | 2 | ||||
-rw-r--r-- | project2/sendmailTask.cpp | 2 | ||||
-rw-r--r-- | project2/sqlCheck.cpp | 11 | ||||
-rw-r--r-- | project2/sqlRows.cpp | 2 | ||||
-rw-r--r-- | project2/urlRows.cpp | 4 | ||||
-rw-r--r-- | project2/uuid.cpp | 80 | ||||
-rw-r--r-- | project2/uuid.h | 28 | ||||
-rw-r--r-- | project2/variables.cpp | 27 | ||||
-rw-r--r-- | project2/xmlPresenter.cpp | 2 | ||||
-rw-r--r-- | project2/xslRows.cpp | 18 |
15 files changed, 133 insertions, 76 deletions
diff --git a/project2/Jamfile.jam b/project2/Jamfile.jam index 3b8e1e8..53ff5ef 100644 --- a/project2/Jamfile.jam +++ b/project2/Jamfile.jam @@ -43,12 +43,13 @@ lib p2uuid : uuid.cpp : <uuid>ossp:<define>OSSP_UUID + <uuid>boost:<define>BOOST_UUID <uuid>ossp:<library>osspuuid ; lib p2common : appEngine.cpp dataSource.cpp environment.cpp fileStarGlibIoChannel.cpp iHaveParameters.cpp - iterate.cpp paramChecker.cpp presenter.cpp rawView.cpp dumpTask.cpp logger.cpp if.cpp + iterate.cpp paramChecker.cpp presenter.cpp rawView.cpp logger.cpp if.cpp sourceObject.cpp task.cpp variables.cpp variableConvert.cpp view.cpp xmlObjectLoader.cpp exceptions.cpp sessionClearTask.cpp session.cpp sessionSetTask.cpp commonObjects.cpp xmlPresenter.cpp rowView.cpp rowSet.cpp rowUser.cpp rowProcessor.cpp config.cpp @@ -97,7 +98,6 @@ lib p2xmlSession : : <library>../libmisc//misc <library>libxmlpp - <uuid>ossp:<define>OSSP_UUID : : <library>p2uuid ; @@ -148,7 +148,6 @@ lib p2web : <library>cgicc <library>glibmm <library>libxmlpp - <uuid>ossp:<define>OSSP_UUID : : <library>p2parts <library>p2xmlSession @@ -158,7 +157,6 @@ exe p2cgi : cgi/p2webCgi.cpp : <library>p2web - <uuid>ossp:<define>OSSP_UUID ; exe p2fcgi : @@ -167,15 +165,17 @@ exe p2fcgi : fcgi : <library>p2web - <uuid>ossp:<define>OSSP_UUID ; exe p2console : - [ glob console/*.cpp ] + [ glob dumpTask.cpp console/*.cpp ] : <library>p2parts ; -explicit install ; +explicit install installp2con installp2cgi installp2fcgi ; package.install install : : p2console p2cgi p2fcgi ; +package.install installp2con : : p2console ; +package.install installp2cgi : : p2cgi ; +package.install installp2fcgi : : p2fcgi ; diff --git a/project2/cgi/FCgiIO.cpp b/project2/cgi/FCgiIO.cpp index 7a3dd09..8d52a77 100644 --- a/project2/cgi/FCgiIO.cpp +++ b/project2/cgi/FCgiIO.cpp @@ -52,8 +52,9 @@ cgicc::FCgiIO::FCgiIO(FCGX_Request& request) } cgicc::FCgiIO::FCgiIO(const FCgiIO& io) - : CgiInput(io), - std::ostream(&fOutBuf), + : std::ios(), + CgiInput(io), + std::ostream(&fOutBuf), fRequest(io.fRequest), fErr(&fErrBuf), fEnv(io.fEnv) diff --git a/project2/console/consoleAppEngine.cpp b/project2/console/consoleAppEngine.cpp index 43b58c9..bd7c6c6 100644 --- a/project2/console/consoleAppEngine.cpp +++ b/project2/console/consoleAppEngine.cpp @@ -110,7 +110,7 @@ ConsoleApplicationEngine::session() const } void -ConsoleApplicationEngine::addAppData(const Presenter * p) const +ConsoleApplicationEngine::addAppData(const Presenter *) const { } @@ -125,13 +125,13 @@ ConsoleApplicationEngine::ConsolePresenter::~ConsolePresenter() } void -ConsoleApplicationEngine::ConsolePresenter::pushSub(const Glib::ustring & name, const Glib::ustring & ns) const +ConsoleApplicationEngine::ConsolePresenter::pushSub(const Glib::ustring &, const Glib::ustring &) const { indent += 2; } void -ConsoleApplicationEngine::ConsolePresenter::addField(const Glib::ustring & name, const Glib::ustring & ns, const Glib::ustring & value) const +ConsoleApplicationEngine::ConsolePresenter::addField(const Glib::ustring &, const Glib::ustring &, const Glib::ustring &) const { } diff --git a/project2/console/consoleEnvironment.cpp b/project2/console/consoleEnvironment.cpp index 1c39dd0..31f9ac9 100644 --- a/project2/console/consoleEnvironment.cpp +++ b/project2/console/consoleEnvironment.cpp @@ -47,13 +47,13 @@ ConsoleEnvironment::postinit(const boost::program_options::options_description & } Glib::ustring -ConsoleEnvironment::getParamUri(unsigned int idx) const +ConsoleEnvironment::getParamUri(unsigned int) const { throw std::runtime_error("Not implemented"); } Glib::ustring -ConsoleEnvironment::getParamQuery(const std::string & idx) const +ConsoleEnvironment::getParamQuery(const std::string &) const { throw std::runtime_error("Not implemented"); } diff --git a/project2/fileRows.cpp b/project2/fileRows.cpp index 315c987..e990f56 100644 --- a/project2/fileRows.cpp +++ b/project2/fileRows.cpp @@ -131,13 +131,13 @@ FileRows::getCurrentValue(unsigned int col) const } bool -FileRows::isNull(unsigned int col) const +FileRows::isNull(unsigned int) const { return false; } bool -FileRows::isNull(const Glib::ustring & col) const +FileRows::isNull(const Glib::ustring &) const { return false; } diff --git a/project2/fileStarGlibIoChannel.cpp b/project2/fileStarGlibIoChannel.cpp index bbc6591..3ec26ce 100644 --- a/project2/fileStarGlibIoChannel.cpp +++ b/project2/fileStarGlibIoChannel.cpp @@ -27,7 +27,7 @@ FileStarChannel::close_vfunc() } Glib::IOStatus -FileStarChannel::set_flags_vfunc(Glib::IOFlags flags) +FileStarChannel::set_flags_vfunc(Glib::IOFlags) { return Glib::IO_STATUS_NORMAL; } diff --git a/project2/sendmailTask.cpp b/project2/sendmailTask.cpp index 7f1274e..b1e3bb6 100644 --- a/project2/sendmailTask.cpp +++ b/project2/sendmailTask.cpp @@ -58,7 +58,7 @@ class BoundaryBegin : public SendMailTask::MailPart { }; class BoundaryEnd : public SendMailTask::MailPart { public: - const char * write(char ** buf, int * len) { + const char * write(char **, int * len) { *len = 19; return "\r\n--<<divider>>--\r\n"; } diff --git a/project2/sqlCheck.cpp b/project2/sqlCheck.cpp index 458aa90..a6e71a1 100644 --- a/project2/sqlCheck.cpp +++ b/project2/sqlCheck.cpp @@ -9,6 +9,10 @@ DECLARE_LOADER("sqlcheck", SqlCheck); +class CantCompareStrings : public std::exception { }; +class CantCompareDateTimes : public std::exception { }; +class CantCompareNulls : public std::exception { }; + SqlCheck::SqlCheck(const xmlpp::Element * p) : SourceObject(p), IHaveParameters(p), @@ -40,8 +44,10 @@ class HandleDoCompare : public DB::HandleField { testOp(tO) { } void null() { + throw CantCompareNulls(); } - void string(const char * c, size_t l) { + void string(const char *, size_t) { + throw CantCompareStrings(); } void integer(int64_t i) { floatingpoint(i); @@ -66,7 +72,8 @@ class HandleDoCompare : public DB::HandleField { retVal = true; } } - void timestamp(const struct tm & t) { + void timestamp(const struct tm &) { + throw CantCompareDateTimes(); } bool operator()() const { return retVal; diff --git a/project2/sqlRows.cpp b/project2/sqlRows.cpp index 2a162ab..bb94034 100644 --- a/project2/sqlRows.cpp +++ b/project2/sqlRows.cpp @@ -230,7 +230,7 @@ SqlRows::SqlText::writeSql(Glib::ustring & sql) const } void -SqlRows::SqlText::bindParams(const RowProcessor * rp, DB::SelectCommand * cmd, unsigned int & offset) const +SqlRows::SqlText::bindParams(const RowProcessor *, DB::SelectCommand *, unsigned int &) const { } diff --git a/project2/urlRows.cpp b/project2/urlRows.cpp index b2c247d..cb97b7f 100644 --- a/project2/urlRows.cpp +++ b/project2/urlRows.cpp @@ -63,13 +63,13 @@ UrlRows::getCurrentValue(unsigned int col) const } bool -UrlRows::isNull(unsigned int col) const +UrlRows::isNull(unsigned int) const { return false; } bool -UrlRows::isNull(const Glib::ustring & col) const +UrlRows::isNull(const Glib::ustring &) const { return false; } diff --git a/project2/uuid.cpp b/project2/uuid.cpp index 6b8bd0d..ddc0e50 100644 --- a/project2/uuid.cpp +++ b/project2/uuid.cpp @@ -1,99 +1,129 @@ -#include "uuid.h" - -#ifdef USINGBOOSTUUID +#ifdef BOOST_UUID +# include <boost/version.hpp> +# if BOOST_VERSION < 104200 +# error "Boost UUIDs required v1.42 or above" +# else +# include <boost/uuid/uuid.hpp> +# endif #include <boost/lexical_cast.hpp> #include <boost/uuid/uuid_io.hpp> #include <boost/uuid/uuid_generators.hpp> +#define uuid_impl boost::uuids::uuid +#include "uuid.h" UUID::UUID() { - boost_uuid = boost::uuids::nil_generator()(); + _uuid = new boost::uuids::uuid(boost::uuids::nil_generator()()); +} + +UUID::UUID(const UUID & other) +{ + _uuid = new boost::uuids::uuid(*other._uuid); } UUID::UUID(const std::string & str) { - boost_uuid = boost::lexical_cast<boost::uuids::uuid>(str); + _uuid = new boost::uuids::uuid(boost::uuids::string_generator()(str)); } UUID UUID::generate_random() { UUID u; - u.boost_uuid = boost::uuids::random_generator()(); + u._uuid = new boost::uuids::uuid(boost::uuids::random_generator()()); return u; } bool UUID::is_nil() const { - return boost_uuid.is_nil(); + return _uuid->is_nil(); } std::string UUID::str() const { - return boost::lexical_cast<std::string>(boost_uuid); + return boost::lexical_cast<std::string>(*_uuid); } -void +UUID & UUID::operator=(const std::string & str) { - boost_uuid = boost::lexical_cast<boost::uuids::uuid>(str); -} - -bool -UUID::operator!=(const UUID & other) const -{ - return boost_uuid != other.boost_uuid; + *_uuid = boost::uuids::string_generator()(str); + return *this; } #endif -#ifdef USINGOSSPUUID +#ifdef OSSP_UUID +# include <ossp/uuid++.hh> +#define uuid_impl uuid +#include "uuid.h" UUID::UUID() { + _uuid = new uuid(); +} + +UUID::UUID(const UUID & other) +{ + _uuid = new uuid(*other._uuid); } UUID::UUID(const std::string & str) { - ossp_uuid.import(str.c_str()); + _uuid = new uuid(); + _uuid->import(str.c_str()); } UUID UUID::generate_random() { UUID u; - u.ossp_uuid.make(UUID_MAKE_V4); + u._uuid->make(UUID_MAKE_V4); return u; } bool UUID::is_nil() const { - return ossp_uuid.isnil(); + return _uuid->isnil(); } std::string UUID::str() const { - char * s = ossp_uuid.string(); + char * s = _uuid->string(); std::string r(s); free(s); return r; } -void +UUID & UUID::operator=(const std::string & str) { - ossp_uuid.import(str.c_str()); + _uuid->import(str.c_str()); + return *this; +} + +#endif + +// Shared implementation +UUID::~UUID() +{ + delete _uuid; } bool UUID::operator!=(const UUID & other) const { - return ossp_uuid != other.ossp_uuid; + return *_uuid != *other._uuid; } -#endif +UUID & +UUID::operator=(const UUID & other) +{ + *_uuid = *other._uuid; + return *this; +} diff --git a/project2/uuid.h b/project2/uuid.h index 9f7fbbe..4c60ae5 100644 --- a/project2/uuid.h +++ b/project2/uuid.h @@ -2,40 +2,30 @@ #define UUID_H #include <iostream> -#include <boost/version.hpp> - -#ifdef OSSP_UUID -# define USINGOSSPUUID -# include <ossp/uuid++.hh> -#else -# if BOOST_VERSION < 104200 -# error "Boost UUIDs required v1.42 or above" -# else -# include <boost/uuid/uuid.hpp> -# define USINGBOOSTUUID -# endif + +#ifndef uuid_impl +class uuid_impl; #endif class UUID { public: UUID(); + ~UUID(); + UUID(const UUID &); UUID(const std::string &); static UUID generate_random(); + UUID & operator=(const UUID & other); + UUID & operator=(const std::string &); + bool operator!=(const UUID & other) const; bool is_nil() const; - void operator=(const std::string &); std::string str() const; private: -#ifdef USINGBOOSTUUID - boost::uuids::uuid boost_uuid; -#endif -#ifdef USINGOSSPUUID - mutable uuid ossp_uuid; -#endif + uuid_impl * _uuid; }; #endif diff --git a/project2/variables.cpp b/project2/variables.cpp index c5907ed..29e6353 100644 --- a/project2/variables.cpp +++ b/project2/variables.cpp @@ -33,8 +33,27 @@ enum VT_typeID { }; static +VT_typeID +getVariableTypeFromName(const std::string & src) +{ + if (src.empty()) return String; + if (src == "string") return String; + if (src == "stringptr") return StringPtr; + if (src == "int") return Int; + if (src == "uint") return UInt; + if (src == "lint") return LInt; + if (src == "luint") return LUInt; + if (src == "llint") return LLInt; + if (src == "lluint") return LLUInt; + if (src == "float") return Float; + if (src == "double") return Double; + if (src == "datetime") return DateTime; + if (src == "datetimeptr") return DateTimePtr; + throw UnknownVariableType(); +} +static VariableType -makeVariableType(const Glib::ustring & src, const std::string & type, const VT_typeID format = DefaultType) +makeVariableType(const Glib::ustring & src, const VT_typeID format = DefaultType) { switch (format) { case DefaultType: @@ -100,8 +119,8 @@ VariableType::operator=(const VariableType & vt) class VariableLiteral : public VariableImpl { public: - VariableLiteral(const Glib::ustring & src, const std::string & type = std::string()) : - val(makeVariableType(src, type)) + VariableLiteral(const Glib::ustring & src, const VT_typeID format = DefaultType) : + val(makeVariableType(src, format)) { } @@ -356,7 +375,7 @@ Variable::Variable(const xmlpp::Element * e, const Glib::ustring & n, bool requi else if (source == "config") var = new VariableConfig(c); else if (source == "literal" || source.empty()) - var = new VariableLiteral(c->get_attribute_value("value"), c->get_attribute_value("type")); + var = new VariableLiteral(c->get_attribute_value("value"), getVariableTypeFromName(c->get_attribute_value("type"))); else throw UnknownVariableSource(); return; diff --git a/project2/xmlPresenter.cpp b/project2/xmlPresenter.cpp index 32d28cb..9cf7a73 100644 --- a/project2/xmlPresenter.cpp +++ b/project2/xmlPresenter.cpp @@ -38,7 +38,7 @@ XmlPresenter::pushSub(const Glib::ustring & name, const Glib::ustring & ns) cons void XmlPresenter::addAttr(const Glib::ustring & name, const Glib::ustring & ns, const VariableType & value) const { - nodeStack.back()->set_attribute(name, value); + nodeStack.back()->set_attribute(name, value, ns); } void diff --git a/project2/xslRows.cpp b/project2/xslRows.cpp index 3742e93..537a459 100644 --- a/project2/xslRows.cpp +++ b/project2/xslRows.cpp @@ -131,11 +131,21 @@ XslRows::execute(const RowProcessor * rp) const else if (xpathObjI->stringval) { values[xp.first] = boost::shared_ptr<const Glib::ustring>(new Glib::ustring((const char *)xpathObjI->stringval)); } - else if (xpathObjI->nodesetval && xpathObjI->nodesetval->nodeNr == 1) { - if (xpathObjI->nodesetval->nodeTab[0]->children && xpathObjI->nodesetval->nodeTab[0]->children->content) { - xmlChar * val = xpathObjI->nodesetval->nodeTab[0]->children->content; - values[xp.first] = boost::shared_ptr<const Glib::ustring>(new Glib::ustring((const char *)val)); + else if (xpathObjI->nodesetval) { + boost::shared_ptr<Glib::ustring> str = boost::shared_ptr<Glib::ustring>(new Glib::ustring()); + for (int i = 0; i < xpathObjI->nodesetval->nodeNr; i += 1) { + xmlNodePtr n = xpathObjI->nodesetval->nodeTab[i]; + if (n->content) { + *str += (const char *)n->content; + } + for (n = n->children; n; n = n->next) { + xmlChar * val = n->content; + if (val) { + *str += (const char *)val; + } + } } + values[xp.first] = str; } } rp->rowReady(); |