summaryrefslogtreecommitdiff
path: root/project2/sql
diff options
context:
space:
mode:
authorrandomdan <randomdan@localhost>2011-11-02 16:39:12 +0000
committerrandomdan <randomdan@localhost>2011-11-02 16:39:12 +0000
commitff8b64b23774355d131e95c29f263878c3993432 (patch)
treea33de1084a8f2e9b04a4111905df6d249fabed65 /project2/sql
parentFinally sort the stupid names problem in the XML lib and remove xmlMemCache f... (diff)
downloadproject2-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.cpp22
-rw-r--r--project2/sql/sqlMergeTask.h6
-rw-r--r--project2/sql/sqlVariableBinder.cpp6
-rw-r--r--project2/sql/sqlVariableBinder.h1
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;