diff options
author | randomdan <randomdan@localhost> | 2011-11-02 16:39:12 +0000 |
---|---|---|
committer | randomdan <randomdan@localhost> | 2011-11-02 16:39:12 +0000 |
commit | ff8b64b23774355d131e95c29f263878c3993432 (patch) | |
tree | a33de1084a8f2e9b04a4111905df6d249fabed65 /project2/sql | |
parent | Finally sort the stupid names problem in the XML lib and remove xmlMemCache f... (diff) | |
download | project2-ff8b64b23774355d131e95c29f263878c3993432.tar.bz2 project2-ff8b64b23774355d131e95c29f263878c3993432.tar.xz project2-ff8b64b23774355d131e95c29f263878c3993432.zip |
Make many things use variables instead of preread values
Add support for a Boolean type
Fix flow error in exception handling
Diffstat (limited to 'project2/sql')
-rw-r--r-- | project2/sql/sqlMergeTask.cpp | 22 | ||||
-rw-r--r-- | project2/sql/sqlMergeTask.h | 6 | ||||
-rw-r--r-- | project2/sql/sqlVariableBinder.cpp | 6 | ||||
-rw-r--r-- | project2/sql/sqlVariableBinder.h | 1 |
4 files changed, 20 insertions, 15 deletions
diff --git a/project2/sql/sqlMergeTask.cpp b/project2/sql/sqlMergeTask.cpp index fd9ae96..30d3a59 100644 --- a/project2/sql/sqlMergeTask.cpp +++ b/project2/sql/sqlMergeTask.cpp @@ -49,9 +49,9 @@ SqlMergeTask::SqlMergeTask(const xmlpp::Element * p) : SourceObject(p), Task(p), updateWhere(p, "updatewhere", false), - patchOrder(p->get_attribute_value("patchorder")), - earlyKeys(p->get_attribute_value("earlykeys") == "yes"), - useView(p->get_attribute_value("useview") == "yes"), + patchOrder(p, "patchorder", false), + earlyKeys(p, "earlykeys", false, false), + useView(p, "useview", false, false), tempTableCreated(false), insCmd(NULL), destdb(NULL), @@ -63,7 +63,7 @@ SqlMergeTask::SqlMergeTask(const xmlpp::Element * p) : loader.supportedStorers.insert(Storer::into(&sources)); loader.collectAll(p, true); - if (!sources.empty() && useView) { + if (!sources.empty() && useView()) { throw NotSupported("useview not supported with iterate fillers"); } @@ -72,7 +72,7 @@ SqlMergeTask::SqlMergeTask(const xmlpp::Element * p) : TargetColumnPtr tcp(new TargetColumn(e->get_child_text()->get_content())); tcp->maptable = e->get_attribute_value("maptable"); if (!tcp->maptable.empty()) { - if (useView) { + if (useView()) { throw NotSupported("useview not supported with mapped columns"); } tcp->mapcolumn = e->get_attribute_value("mapcolumn"); @@ -118,7 +118,7 @@ void SqlMergeTask::execute() const { createTempTable(); - if (earlyKeys) { + if (earlyKeys()) { createTempKey(); copyToTempTable(); } @@ -134,14 +134,14 @@ SqlMergeTask::execute() const BOOST_FOREACH(const Keys::value_type & k, keys) { tp.addKey(k); } - tp.patch(updateWhere(), patchOrder.c_str()); + tp.patch(updateWhere(), patchOrder()); dropTempTable(); } void SqlMergeTask::createTempTable() const { - if (useView) { + if (useView()) { DB::ModifyCommand * cv = destdb->newModifyCommand(stringf( "CREATE VIEW %s AS %s", dtablet.c_str(), @@ -174,7 +174,7 @@ SqlMergeTask::dropTempTable() const { if (tempTableCreated) { DB::ModifyCommand * d; - if (useView) { + if (useView()) { d = destdb->newModifyCommand("DROP VIEW " + dtablet); } else { @@ -187,7 +187,7 @@ SqlMergeTask::dropTempTable() const void SqlMergeTask::createTempKey() const { - if (useView) return; + if (useView()) return; /* Primary key */ Buffer idx; idx.appendf("ALTER TABLE %s ADD CONSTRAINT pk_%s PRIMARY KEY(%s)", @@ -285,7 +285,7 @@ attach(boost::intrusive_ptr<IHaveSubTasks> i, DB::ModifyCommand * insert) void SqlMergeTask::copyToTempTable() const { - if (useView) return; + if (useView()) return; BOOST_FOREACH(const Sources::value_type & i, sources) { i->execute(); } diff --git a/project2/sql/sqlMergeTask.h b/project2/sql/sqlMergeTask.h index c9e206c..41d1269 100644 --- a/project2/sql/sqlMergeTask.h +++ b/project2/sql/sqlMergeTask.h @@ -47,9 +47,9 @@ class SqlMergeTask : public Task { Keys keys; Keys indexes; const Variable updateWhere; - const std::string patchOrder; - const bool earlyKeys; - const bool useView; + const Variable patchOrder; + const Variable earlyKeys; + const Variable useView; private: virtual void copyToTempTable() const; diff --git a/project2/sql/sqlVariableBinder.cpp b/project2/sql/sqlVariableBinder.cpp index 169fe2c..1ff8170 100644 --- a/project2/sql/sqlVariableBinder.cpp +++ b/project2/sql/sqlVariableBinder.cpp @@ -70,9 +70,13 @@ SqlVariableBinder::operator()(const float & i) const cmd->bindParamF(idx, i); } void +SqlVariableBinder::operator()(const Boolean & i) const +{ + cmd->bindParamI(idx, i.value ? 1 : 0); +} +void SqlVariableBinder::operator()(const boost::posix_time::ptime & i) const { struct tm tm(boost::posix_time::to_tm(i)); cmd->bindParamT(idx, &tm); } - diff --git a/project2/sql/sqlVariableBinder.h b/project2/sql/sqlVariableBinder.h index df3879a..3d68773 100644 --- a/project2/sql/sqlVariableBinder.h +++ b/project2/sql/sqlVariableBinder.h @@ -14,6 +14,7 @@ class SqlVariableBinder : public boost::static_visitor<> { public: SqlVariableBinder(DB::Command * c, unsigned int i); void operator()(const Null & i) const; + void operator()(const Boolean & i) const; void operator()(const Glib::ustring & i) const; void operator()(const long long unsigned int & i) const; void operator()(const long unsigned int & i) const; |