diff options
author | randomdan <randomdan@localhost> | 2011-11-25 18:59:27 +0000 |
---|---|---|
committer | randomdan <randomdan@localhost> | 2011-11-25 18:59:27 +0000 |
commit | 01ecca9ef7c64b95aecbb1f01b0791c31d288d5b (patch) | |
tree | b4add212bcaed76600a562e5cda562718f3a2294 /project2/sql | |
parent | Transactional caches (diff) | |
download | project2-01ecca9ef7c64b95aecbb1f01b0791c31d288d5b.tar.bz2 project2-01ecca9ef7c64b95aecbb1f01b0791c31d288d5b.tar.xz project2-01ecca9ef7c64b95aecbb1f01b0791c31d288d5b.zip |
Remove the need to implement loadComplete which is empty in most cases
Restructure presenters in layers based on features allowing for simpler cache implementations
Minor XSLT changes to support new layout from presentation which is more consistent
Diffstat (limited to 'project2/sql')
-rw-r--r-- | project2/sql/rdbmsDataSource.cpp | 5 | ||||
-rw-r--r-- | project2/sql/rdbmsDataSource.h | 1 | ||||
-rw-r--r-- | project2/sql/sqlCache.cpp | 87 | ||||
-rw-r--r-- | project2/sql/sqlMergeTask.cpp | 5 |
4 files changed, 34 insertions, 64 deletions
diff --git a/project2/sql/rdbmsDataSource.cpp b/project2/sql/rdbmsDataSource.cpp index 77d6fbf..20ccaec 100644 --- a/project2/sql/rdbmsDataSource.cpp +++ b/project2/sql/rdbmsDataSource.cpp @@ -57,11 +57,6 @@ RdbmsDataSource::~RdbmsDataSource() { } -void -RdbmsDataSource::loadComplete(const CommonObjects *) -{ -} - const DB::Connection & RdbmsDataSource::getWritable() const { diff --git a/project2/sql/rdbmsDataSource.h b/project2/sql/rdbmsDataSource.h index fdcfbe7..60206ff 100644 --- a/project2/sql/rdbmsDataSource.h +++ b/project2/sql/rdbmsDataSource.h @@ -53,7 +53,6 @@ class RdbmsDataSource : public DataSource { const DB::Connection & getReadonly() const; const DB::Connection & getWritable() const; - virtual void loadComplete(const CommonObjects *); virtual void commit(); virtual void rollback(); diff --git a/project2/sql/sqlCache.cpp b/project2/sql/sqlCache.cpp index d6875ac..5435dc4 100644 --- a/project2/sql/sqlCache.cpp +++ b/project2/sql/sqlCache.cpp @@ -62,8 +62,6 @@ class SqlCache : public Cache { SqlCacheRowSet(SelectPtr r) : RowSet(NULL), s(r) { - } - void loadComplete(const CommonObjects *) { } class SqlCacheRowState : public RowState { public: @@ -149,78 +147,61 @@ class SqlCache : public Cache { return NULL; } - class SqlCachePresenter : public Presenter { + class SqlCachePresenter : public RowSetPresenter { public: SqlCachePresenter(const Glib::ustring & name, const Glib::ustring & filter, const RdbmsDataSource * d) : - depth(0), row(1), db(d), n(name), f(filter) { } - void declareNamespace(const Glib::ustring &, const Glib::ustring &) const { } - void setNamespace(const Glib::ustring &, const Glib::ustring &) const { } - void pushSub(const Glib::ustring & name, const Glib::ustring &) const { - depth += 1; - if (depth == 2) { - col = name; - } - else if (depth == 1) { - } + void addNewRow(const Glib::ustring &) const { } - void addAttr(const Glib::ustring & name, const Glib::ustring &, const VariableType & value) const { - attrs.insert(Values::value_type(name, value)); + void addAttribute(const Glib::ustring & name, const VariableType & value) const { + attrs[name] = value; } - void addText(const VariableType & value) const { - cols.insert(Values::value_type(col, value)); + void addNamedValue(const Glib::ustring & name, const VariableType & value) const { + cols[name] = value; } - void popSub() const { - if (depth == 2) { - col.clear(); + void finishRow() const { + Buffer sql; + sql.appendf("INSERT INTO %s_%s_%s_rows(p2_row", HeaderTable.c_str(), n.c_str(), f.c_str()); + BOOST_FOREACH(const Values::value_type & a, attrs) { + sql.appendf(", p2attr_%s", a.first.c_str()); } - else if (depth == 1) { - Buffer sql; - sql.appendf("INSERT INTO %s_%s_%s_rows(p2_row", HeaderTable.c_str(), n.c_str(), f.c_str()); - BOOST_FOREACH(const Values::value_type & a, attrs) { - sql.appendf(", p2attr_%s", a.first.c_str()); - } - BOOST_FOREACH(const Values::value_type & v, cols) { - sql.appendf(", %s", v.first.c_str()); - } - sql.appendf(") VALUES(?"); - for (size_t x = attrs.size(); x > 0; x -= 1) { - sql.append(", ?"); - } - for (size_t x = cols.size(); x > 0; x -= 1) { - sql.append(", ?"); - } - sql.appendf(")"); - ModifyPtr m(db->getWritable().newModifyCommand(sql)); - unsigned int offset = 0; - m->bindParamI(offset++, row++); - BOOST_FOREACH(const Values::value_type & a, attrs) { - boost::apply_visitor<const SqlVariableBinder, const VariableType>(SqlVariableBinder(m.get(), offset++), a.second); - } - BOOST_FOREACH(const Values::value_type & v, cols) { - boost::apply_visitor<const SqlVariableBinder, const VariableType>(SqlVariableBinder(m.get(), offset++), v.second); - } - m->execute(); - cols.clear(); - attrs.clear(); + BOOST_FOREACH(const Values::value_type & v, cols) { + sql.appendf(", %s", v.first.c_str()); + } + sql.appendf(") VALUES(?"); + for (size_t x = attrs.size(); x > 0; x -= 1) { + sql.append(", ?"); + } + for (size_t x = cols.size(); x > 0; x -= 1) { + sql.append(", ?"); + } + sql.appendf(")"); + ModifyPtr m(db->getWritable().newModifyCommand(sql)); + unsigned int offset = 0; + m->bindParamI(offset++, row++); + BOOST_FOREACH(const Values::value_type & a, attrs) { + boost::apply_visitor<const SqlVariableBinder, const VariableType>(SqlVariableBinder(m.get(), offset++), a.second); + } + BOOST_FOREACH(const Values::value_type & v, cols) { + boost::apply_visitor<const SqlVariableBinder, const VariableType>(SqlVariableBinder(m.get(), offset++), v.second); } - depth -= 1; + m->execute(); + cols.clear(); + attrs.clear(); } private: - mutable unsigned int depth; mutable unsigned int row; const RdbmsDataSource * db; - mutable Glib::ustring col; const Glib::ustring n, f; typedef std::map<Glib::ustring, VariableType> Values; mutable Values cols, attrs; }; - PresenterPtr openFor(const Glib::ustring & n, const Glib::ustring & f, const IHaveParameters * ps) + RowSetPresenterPtr openFor(const Glib::ustring & n, const Glib::ustring & f, const IHaveParameters * ps) { Buffer sp; sp.appendf("SAVEPOINT sp%p", this); diff --git a/project2/sql/sqlMergeTask.cpp b/project2/sql/sqlMergeTask.cpp index 30d3a59..f98d57e 100644 --- a/project2/sql/sqlMergeTask.cpp +++ b/project2/sql/sqlMergeTask.cpp @@ -27,8 +27,6 @@ class SqlMergeInsert : IHaveParameters, public Task { IHaveParameters(p), Task(p) { } - void loadComplete(const CommonObjects*) { - } void execute() const { unsigned int col = 0; BOOST_FOREACH(const Parameters::value_type & v, parameters) { @@ -239,9 +237,6 @@ class Populate : public NoOutputExecute { cmd(c) { } - virtual void loadComplete(const CommonObjects *) - { - } void execute() const { unsigned int idx = 0; |