summaryrefslogtreecommitdiff
path: root/project2/sql
diff options
context:
space:
mode:
authorrandomdan <randomdan@localhost>2011-11-25 18:59:27 +0000
committerrandomdan <randomdan@localhost>2011-11-25 18:59:27 +0000
commit01ecca9ef7c64b95aecbb1f01b0791c31d288d5b (patch)
treeb4add212bcaed76600a562e5cda562718f3a2294 /project2/sql
parentTransactional caches (diff)
downloadproject2-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.cpp5
-rw-r--r--project2/sql/rdbmsDataSource.h1
-rw-r--r--project2/sql/sqlCache.cpp87
-rw-r--r--project2/sql/sqlMergeTask.cpp5
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;