summaryrefslogtreecommitdiff
path: root/project2/sql
diff options
context:
space:
mode:
authorrandomdan <randomdan@localhost>2011-12-14 21:42:31 +0000
committerrandomdan <randomdan@localhost>2011-12-14 21:42:31 +0000
commit8a7980bff41ccb8dc42b18eb1edd4b3938977fc3 (patch)
tree4b0a3414ba881a3118630c41ca24129d23f996df /project2/sql
parentDon't write JSON numbers in scientific notation, use native C++ boolalpha for... (diff)
downloadproject2-8a7980bff41ccb8dc42b18eb1edd4b3938977fc3.tar.bz2
project2-8a7980bff41ccb8dc42b18eb1edd4b3938977fc3.tar.xz
project2-8a7980bff41ccb8dc42b18eb1edd4b3938977fc3.zip
Pluggable script engines
XML script parser moved to XML module Script parsing object multiple instantiation bug fix Scripts changed to match new standardized format and layout
Diffstat (limited to 'project2/sql')
-rw-r--r--project2/sql/Jamfile.jam16
-rw-r--r--project2/sql/pch.hpp2
-rw-r--r--project2/sql/rdbmsDataSource.cpp22
-rw-r--r--project2/sql/rdbmsDataSource.h5
-rw-r--r--project2/sql/sqlCache.cpp2
-rw-r--r--project2/sql/sqlCheck.cpp8
-rw-r--r--project2/sql/sqlCheck.h4
-rw-r--r--project2/sql/sqlMergeTask.cpp51
-rw-r--r--project2/sql/sqlMergeTask.h5
-rw-r--r--project2/sql/sqlRows.cpp5
-rw-r--r--project2/sql/sqlRows.h3
-rw-r--r--project2/sql/sqlTask.cpp21
-rw-r--r--project2/sql/sqlTask.h3
-rw-r--r--project2/sql/sqlWriter.cpp67
-rw-r--r--project2/sql/sqlWriter.h9
15 files changed, 106 insertions, 117 deletions
diff --git a/project2/sql/Jamfile.jam b/project2/sql/Jamfile.jam
index 779aba3..068394f 100644
--- a/project2/sql/Jamfile.jam
+++ b/project2/sql/Jamfile.jam
@@ -1,12 +1,12 @@
-alias libxmlpp : : : :
- <cflags>"`pkg-config --cflags libxml++-2.6`"
- <linkflags>"`pkg-config --libs libxml++-2.6`" ;
-
+alias glibmm : : : :
+ <cflags>"`pkg-config --cflags glibmm-2.4`"
+ <linkflags>"`pkg-config --libs glibmm-2.4`"
+ ;
explicit object sql-modODBC ;
obj sql-modODBC :
sql-modODBC.cpp :
<library>../../libodbcpp//odbcpp
- <library>libxmlpp
+ <library>glibmm
<include>../../libmisc
<include>../common
: :
@@ -17,7 +17,7 @@ explicit object sql-modPQ ;
obj sql-modPQ :
sql-modPQ.cpp :
<library>../../libpqpp//pqpp
- <library>libxmlpp
+ <library>glibmm
<include>../../libmisc
<include>../common
: :
@@ -27,7 +27,7 @@ obj sql-modPQ :
cpp-pch pch : pch.hpp :
<include>../../libmisc
<include>../../libdbpp
- <library>libxmlpp
+ <library>glibmm
<library>../common//p2common
;
lib p2sql :
@@ -38,7 +38,7 @@ lib p2sql :
:
<odbc>yes:<library>sql-modODBC
<pq>yes:<library>sql-modPQ
- <library>libxmlpp
+ <library>glibmm
<library>../common//p2common
<include>../../libmisc
;
diff --git a/project2/sql/pch.hpp b/project2/sql/pch.hpp
index a212245..01c68d4 100644
--- a/project2/sql/pch.hpp
+++ b/project2/sql/pch.hpp
@@ -21,13 +21,13 @@
#include "sqlWriter.h"
#include "variables.h"
#include "xmlObjectLoader.h"
+#include "scripts.h"
#include <boost/bind.hpp>
#include <boost/foreach.hpp>
#include "options.h"
#include <buffer.h>
#include <column.h>
#include <errno.h>
-#include <libxml++/nodes/textnode.h>
#include <stdexcept>
#endif
diff --git a/project2/sql/rdbmsDataSource.cpp b/project2/sql/rdbmsDataSource.cpp
index 20ccaec..4c6ae17 100644
--- a/project2/sql/rdbmsDataSource.cpp
+++ b/project2/sql/rdbmsDataSource.cpp
@@ -1,7 +1,6 @@
#include <pch.hpp>
#include "rdbmsDataSource.h"
#include "connectionLoader.h"
-#include <libxml++/nodes/textnode.h>
#include <sys/utsname.h>
#include "logger.h"
#include <errno.h>
@@ -40,16 +39,13 @@ RdbmsDataSource::DBHosts RdbmsDataSource::dbhosts;
RdbmsDataSource::FailedHosts RdbmsDataSource::failedhosts;
RdbmsDataSource::DSNSet RdbmsDataSource::changedDSNs;
-RdbmsDataSource::RdbmsDataSource(const xmlpp::Element * p) :
+RdbmsDataSource::RdbmsDataSource(ScriptNodePtr p) :
DataSource(p),
- masterDsn(dynamic_cast<const xmlpp::Element *>(p->find("masterdsn").front())),
- preferLocal(p->get_attribute_value("preferlocal") != "false")
+ masterDsn(p->child("masterdsn")),
+ preferLocal(p->value("preferlocal", true))
{
- BOOST_FOREACH(const xmlpp::Node * node, p->find("readonly/dsn")) {
- const xmlpp::Element * elem = dynamic_cast<const xmlpp::Element *>(node);
- if (elem) {
- roDSNs.insert(ReadonlyDSNs::value_type(elem->get_attribute_value("host"), elem));
- }
+ BOOST_FOREACH(ScriptNodePtr node, p->childrenIn("readonly")) {
+ roDSNs.insert(ReadonlyDSNs::value_type(node->value("host"), node));
}
}
@@ -194,12 +190,10 @@ RdbmsDataSource::RdbmsConnection::isExpired() const
return (time(NULL) > lastUsedTime + keepAliveTime);
}
-RdbmsDataSource::ConnectionInfo::ConnectionInfo(const xmlpp::Element * n)
+RdbmsDataSource::ConnectionInfo::ConnectionInfo(ScriptNodePtr node)
{
- BOOST_FOREACH(const xmlpp::Node * node, n->get_children()) {
- typeId = LoaderBase::getLoader<ConnectionLoader, UnknownConnectionProvider>(node->get_name());
- dsn = dynamic_cast<const xmlpp::Element *>(node)->get_child_text()->get_content();
- }
+ typeId = LoaderBase::getLoader<ConnectionLoader, UnknownConnectionProvider>(node->value("provider"));
+ dsn = node->value("dsn").as<std::string>();
}
DB::Connection *
diff --git a/project2/sql/rdbmsDataSource.h b/project2/sql/rdbmsDataSource.h
index 60206ff..bc72b05 100644
--- a/project2/sql/rdbmsDataSource.h
+++ b/project2/sql/rdbmsDataSource.h
@@ -1,7 +1,6 @@
#ifndef RDBMSDATASOURCE_H
#define RDBMSDATASOURCE_H
-#include <libxml/tree.h>
#include <boost/shared_ptr.hpp>
#include <map>
#include <set>
@@ -32,7 +31,7 @@ class RdbmsDataSource : public DataSource {
class ConnectionInfo {
public:
- ConnectionInfo(const xmlpp::Element *);
+ ConnectionInfo(ScriptNodePtr);
DB::Connection * connect() const;
@@ -48,7 +47,7 @@ class RdbmsDataSource : public DataSource {
typedef std::map<ConnectionInfo, ConnectionPtr> DBHosts; // Map DSN strings to connections
typedef std::map<ConnectionInfo, const DB::ConnectionError> FailedHosts; // Map DSN strings to failures
- RdbmsDataSource(const xmlpp::Element * p);
+ RdbmsDataSource(ScriptNodePtr p);
~RdbmsDataSource();
const DB::Connection & getReadonly() const;
diff --git a/project2/sql/sqlCache.cpp b/project2/sql/sqlCache.cpp
index d1ae930..7ed4ae1 100644
--- a/project2/sql/sqlCache.cpp
+++ b/project2/sql/sqlCache.cpp
@@ -21,7 +21,7 @@ typedef boost::shared_ptr<DB::ModifyCommand> ModifyPtr;
class SqlCache : public Cache {
public:
- SqlCache(const xmlpp::Element * p) :
+ SqlCache(ScriptNodePtr p) :
Cache(p)
{
}
diff --git a/project2/sql/sqlCheck.cpp b/project2/sql/sqlCheck.cpp
index d6e0651..879cbca 100644
--- a/project2/sql/sqlCheck.cpp
+++ b/project2/sql/sqlCheck.cpp
@@ -13,13 +13,13 @@ DECLARE_LOADER("sqlcheck", SqlCheck);
class CantCompareNulls : public std::exception { };
-SqlCheck::SqlCheck(const xmlpp::Element * p) :
+SqlCheck::SqlCheck(ScriptNodePtr p) :
ParamChecker(p),
dataSource(p, "datasource"),
- filter(p, "filter", false, ""),
- testOp(p, "testOp", false, "=="),
+ filter(p, "filter", ""),
+ testOp(p, "testOp", "=="),
testValue(p, "testValue"),
- sqlCommand(dynamic_cast<xmlpp::Element *>(p->get_children("sql").front()))
+ sqlCommand(p->child("sql"))
{
}
diff --git a/project2/sql/sqlCheck.h b/project2/sql/sqlCheck.h
index c9933d7..86492dc 100644
--- a/project2/sql/sqlCheck.h
+++ b/project2/sql/sqlCheck.h
@@ -10,7 +10,7 @@ class RdbmsDataSource;
/// Project2 component to check the value of a variable against an RDBMS data source
class SqlCheck : public ParamChecker {
public:
- SqlCheck(const xmlpp::Element * p);
+ SqlCheck(ScriptNodePtr p);
virtual ~SqlCheck();
virtual void loadComplete(const CommonObjects *);
@@ -22,7 +22,7 @@ class SqlCheck : public ParamChecker {
const Variable testValue;
private:
- const DynamicSql::SqlCommand sqlCommand;
+ DynamicSql::SqlCommand sqlCommand;
const RdbmsDataSource * db;
};
diff --git a/project2/sql/sqlMergeTask.cpp b/project2/sql/sqlMergeTask.cpp
index 96a895a..972b299 100644
--- a/project2/sql/sqlMergeTask.cpp
+++ b/project2/sql/sqlMergeTask.cpp
@@ -12,7 +12,6 @@
#include <boost/algorithm/string/join.hpp>
#include <boost/foreach.hpp>
#include <boost/bind.hpp>
-#include <libxml++/nodes/textnode.h>
bool SqlMergeTask::defaultUseTempTable = true;
static void attach(boost::intrusive_ptr<IHaveSubTasks> i, DB::ModifyCommand * insert);
@@ -22,7 +21,7 @@ typedef boost::intrusive_ptr<SqlMergeInsert> SqlMergeInsertPtr;
/// Project2 component insert custom constructed records during an SQL Merge task
class SqlMergeInsert : IHaveParameters, public Task {
public:
- SqlMergeInsert(const xmlpp::Element * p) :
+ SqlMergeInsert(ScriptNodePtr p) :
SourceObject(p),
IHaveParameters(p),
Task(p) {
@@ -43,51 +42,51 @@ DECLARE_LOADER("sqlmerge", SqlMergeTask);
DECLARE_LOADER("sqlmergeinsert", SqlMergeInsert);
// Conversion logic
-SqlMergeTask::SqlMergeTask(const xmlpp::Element * p) :
+SqlMergeTask::SqlMergeTask(ScriptNodePtr p) :
SourceObject(p),
Task(p),
- updateWhere(p, "updatewhere", false),
- patchOrder(p, "patchorder", false),
- earlyKeys(p, "earlykeys", false, false),
- useView(p, "useview", false, false),
+ updateWhere(p, "updatewhere", Null()),
+ patchOrder(p, "patchorder", Null()),
+ earlyKeys(p, "earlykeys", false),
+ useView(p, "useview", false),
tempTableCreated(false),
+ sqlCommand(NULL),
insCmd(NULL),
destdb(NULL),
dataSource(p, "datasource"),
- dtable(p->get_attribute_value("targettable")),
+ dtable(p->value("targettable").as<std::string>()),
dtablet(stringf("tmp_%s_%d", dtable.c_str(), getpid()))
{
- LoaderBase loader(true);
- loader.supportedStorers.insert(Storer::into<ElementLoader>(&sources));
- loader.collectAll(p, true);
+ p->script->loader.addLoadTarget(p, Storer::into<ElementLoader>(&sources));
if (!sources.empty() && useView()) {
throw NotSupported("useview not supported with iterate fillers");
}
- BOOST_FOREACH(xmlpp::Node * psi, p->find("columns/column")) {
- xmlpp::Element * e = static_cast<xmlpp::Element *>(psi);
- TargetColumnPtr tcp(new TargetColumn(e->get_child_text()->get_content()));
- tcp->maptable = e->get_attribute_value("maptable");
+ BOOST_FOREACH(ScriptNodePtr e, p->childrenIn("columns")) {
+ TargetColumnPtr tcp(new TargetColumn(e->get_name()));
+ tcp->maptable = e->value("maptable", "").as<std::string>();
if (!tcp->maptable.empty()) {
if (useView()) {
throw NotSupported("useview not supported with mapped columns");
}
- tcp->mapcolumn = e->get_attribute_value("mapcolumn");
+ tcp->mapcolumn = e->value("mapcolumn").as<std::string>();
}
cols.insert(tcp);
+ tcp->isKey = e->value("key", false);
+ if (tcp->isKey) {
+ keys.insert(tcp->column);
+ }
}
- BOOST_FOREACH(xmlpp::Node * psi, p->find("columns/column[@key='true']")) {
- keys.insert(static_cast<xmlpp::Element *>(psi)->get_child_text()->get_content());
- }
- BOOST_FOREACH(xmlpp::Node * psi, p->find("sql")) {
- sqls.push_back(static_cast<xmlpp::Element *>(psi)->get_child_text()->get_content());
+ if (p->valueExists("sql")) {
+ sqlCommand = new DynamicSql::SqlCommand(p->child("sql"));
}
}
SqlMergeTask::~SqlMergeTask()
{
delete insCmd;
+ delete sqlCommand;
}
void
@@ -143,7 +142,7 @@ SqlMergeTask::createTempTable() const
DB::ModifyCommand * cv = destdb->newModifyCommand(stringf(
"CREATE VIEW %s AS %s",
dtablet.c_str(),
- boost::algorithm::join(sqls, " UNION ").c_str()));
+ sqlCommand->getSqlFor("").c_str()));
cv->execute();
delete cv;
}
@@ -280,11 +279,13 @@ 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();
}
- BOOST_FOREACH(const std::string & sql, sqls) {
+ if (sqlCommand) {
Buffer ins;
ins.appendf("INSERT INTO %s(", dtablet.c_str());
foreach(Columns::const_iterator, cols, c) {
@@ -300,7 +301,7 @@ SqlMergeTask::copyToTempTable() const
}
ins.append((*c)->column);
}
- ins.appendf(" FROM (%s) tmp_src", sql.c_str());
+ ins.appendf(" FROM (%s) tmp_src", sqlCommand->getSqlFor("").c_str());
DB::ModifyCommand * cttt = destdb->newModifyCommand(ins);
cttt->execute();
delete cttt;
diff --git a/project2/sql/sqlMergeTask.h b/project2/sql/sqlMergeTask.h
index 41d1269..dc23936 100644
--- a/project2/sql/sqlMergeTask.h
+++ b/project2/sql/sqlMergeTask.h
@@ -32,13 +32,14 @@ class SqlMergeTask : public Task {
Column column;
Column mapcolumn;
Table maptable;
+ bool isKey;
};
typedef std::set<TargetColumnPtr, TargetColumn::Sort> Columns;
typedef std::set<Column> Keys;
- SqlMergeTask(const xmlpp::Element * p);
+ SqlMergeTask(ScriptNodePtr p);
virtual ~SqlMergeTask();
virtual void loadComplete(const CommonObjects *);
@@ -60,7 +61,7 @@ class SqlMergeTask : public Task {
mutable bool tempTableCreated;
typedef ANONSTORAGEOF(Iterate) Sources;
Sources sources;
- std::list<std::string> sqls;
+ DynamicSql::SqlCommand * sqlCommand;
protected:
DB::ModifyCommand * insertCommand() const;
DB::ModifyCommand * insCmd;
diff --git a/project2/sql/sqlRows.cpp b/project2/sql/sqlRows.cpp
index ed2d71b..dbcc7be 100644
--- a/project2/sql/sqlRows.cpp
+++ b/project2/sql/sqlRows.cpp
@@ -2,7 +2,6 @@
#include "sqlRows.h"
#include "sqlHandleAsVariableType.h"
#include "rowProcessor.h"
-#include "xml.h"
#include "selectcommand.h"
#include "rdbmsDataSource.h"
#include "column.h"
@@ -14,10 +13,10 @@
DECLARE_LOADER("sqlrows", SqlRows);
-SqlRows::SqlRows(const xmlpp::Element * p) :
+SqlRows::SqlRows(ScriptNodePtr p) :
RowSet(p),
dataSource(p, "datasource"),
- sqlCommand(dynamic_cast<xmlpp::Element *>(p->get_children("sql").front())),
+ sqlCommand(p->child("sql")),
db(NULL)
{
}
diff --git a/project2/sql/sqlRows.h b/project2/sql/sqlRows.h
index 5614fa1..7ed5d3f 100644
--- a/project2/sql/sqlRows.h
+++ b/project2/sql/sqlRows.h
@@ -1,7 +1,6 @@
#ifndef SQLROWS_H
#define SQLROWS_H
-#include <libxml++/nodes/element.h>
#include <boost/intrusive_ptr.hpp>
#include <map>
#include "selectcommand.h"
@@ -14,7 +13,7 @@ class RdbmsDataSource;
/// Project2 component to create a row set based on an SQL SELECT statement issued against an RDBMS data source
class SqlRows : public RowSet {
public:
- SqlRows(const xmlpp::Element * p);
+ SqlRows(ScriptNodePtr p);
~SqlRows();
void execute(const Glib::ustring &, const RowProcessor *) const;
diff --git a/project2/sql/sqlTask.cpp b/project2/sql/sqlTask.cpp
index 9f881de..6ff05af 100644
--- a/project2/sql/sqlTask.cpp
+++ b/project2/sql/sqlTask.cpp
@@ -17,27 +17,26 @@ class SqlIfChangesStorer : public StorerBase<NoOutputExecute, ANONORDEREDSTORAGE
noChanges(nc)
{
}
- bool insert(const xmlpp::Element * p, NoOutputExecutePtr O) {
- xmlpp::Attribute * runon = p->get_attribute("runon");
- if (!runon) {
+ bool insert(ScriptNodePtr p, NoOutputExecutePtr O) {
+ try {
+ ((p->value("runon").as<std::string>() == "changes") ? changes : noChanges)->push_back(O);
+ return true;
+ }
+ catch (const ValueNotFound &) {
throw RunOnNotSpecified();
}
- ((runon->get_value() == "changes") ? changes : noChanges)->push_back(O);
- return true;
}
Map changes, noChanges;
};
-SqlTask::SqlTask(const xmlpp::Element * p) :
+SqlTask::SqlTask(ScriptNodePtr p) :
SourceObject(p),
Task(p),
dataSource(p, "datasource"),
- filter(p, "filter", false, ""),
- sqlCommand(dynamic_cast<xmlpp::Element *>(p->get_children("sql").front()))
+ filter(p, "filter", ""),
+ sqlCommand(p->child("sql"))
{
- LoaderBase loader(true);
- loader.supportedStorers.insert(new SqlIfChangesStorer(&changesNOEs, &noChangesNOEs));
- loader.collectAll(p, true, IgnoreUnsupported);
+ p->script->loader.addLoadTarget(p, new SqlIfChangesStorer(&changesNOEs, &noChangesNOEs));
}
SqlTask::~SqlTask()
diff --git a/project2/sql/sqlTask.h b/project2/sql/sqlTask.h
index 384b000..b0d0d27 100644
--- a/project2/sql/sqlTask.h
+++ b/project2/sql/sqlTask.h
@@ -1,7 +1,6 @@
#ifndef SQLTASK_H
#define SQLTASK_H
-#include <libxml++/nodes/element.h>
#include <boost/intrusive_ptr.hpp>
#include <map>
#include "task.h"
@@ -14,7 +13,7 @@ class RdbmsDataSource;
/// Project2 component to execute a modifying SQL statement against an RDBMS data source
class SqlTask : public Task {
public:
- SqlTask(const xmlpp::Element * p);
+ SqlTask(ScriptNodePtr p);
virtual ~SqlTask();
virtual void loadComplete(const CommonObjects *);
virtual void execute() const;
diff --git a/project2/sql/sqlWriter.cpp b/project2/sql/sqlWriter.cpp
index 90de82f..867e1bd 100644
--- a/project2/sql/sqlWriter.cpp
+++ b/project2/sql/sqlWriter.cpp
@@ -11,25 +11,33 @@ DynamicSql::SqlWriter::~SqlWriter()
{
}
-DynamicSql::SqlCommand::SqlCommand(const xmlpp::Element * N)
+template <typename Type, typename Cons>
+static
+void
+appendNew(DynamicSql::Writers * w, const Cons & cons)
{
- BOOST_FOREACH(xmlpp::Node * n, N->get_children()) {
- const xmlpp::TextNode * t = dynamic_cast<const xmlpp::TextNode *>(n);
- if (t) {
- writers.push_back(new SqlText(t));
- }
- const xmlpp::Element * e = dynamic_cast<const xmlpp::Element *>(n);
- if (e) {
- if (e->get_name() == "filter") {
- SqlFilterPtr f = new SqlFilter(e);
- writers.push_back(f);
- filters.insert(Filters::value_type(f->name, f));
- }
- else if (e->get_name() == "param") {
- writers.push_back(new SqlParameter(e));
- }
- }
+ w->push_back(new Type(cons));
+}
+
+static
+void
+appendNewFromNode(DynamicSql::Writers * w, DynamicSql::SqlCommand::Filters * fs, ScriptNodePtr p)
+{
+ if (fs && p->get_name() == "filter") {
+ DynamicSql::SqlFilterPtr f = new DynamicSql::SqlFilter(p);
+ w->push_back(f);
+ fs->insert(DynamicSql::SqlCommand::Filters::value_type(f->name, f));
}
+ else if (p->get_name() == "param") {
+ w->push_back(new DynamicSql::SqlParameter(p));
+ }
+}
+
+DynamicSql::SqlCommand::SqlCommand(ScriptNodePtr s)
+{
+ s->composeWithCallbacks(
+ boost::bind(&appendNew<SqlText, Glib::ustring>, &writers, _1),
+ boost::bind(&appendNewFromNode, &writers, &filters, _1));
}
Glib::ustring
@@ -59,22 +67,13 @@ DynamicSql::SqlCommand::bindParams(DB::Command * cmd, unsigned int & offset) con
}
}
-DynamicSql::SqlFilter::SqlFilter(const xmlpp::Element * N) :
- name(N->get_attribute_value("name")),
+DynamicSql::SqlFilter::SqlFilter(ScriptNodePtr p) :
+ name(p->value("name").as<Glib::ustring>()),
active(false)
{
- BOOST_FOREACH(xmlpp::Node * n, N->get_children()) {
- const xmlpp::TextNode * t = dynamic_cast<const xmlpp::TextNode *>(n);
- if (t) {
- writers.push_back(new SqlText(t));
- }
- const xmlpp::Element * e = dynamic_cast<const xmlpp::Element *>(n);
- if (e) {
- if (e->get_name() == "param") {
- writers.push_back(new SqlParameter(e));
- }
- }
- }
+ p->composeWithCallbacks(
+ boost::bind(&appendNew<SqlText, Glib::ustring>, &writers, _1),
+ boost::bind(&appendNewFromNode, &writers, (DynamicSql::SqlCommand::Filters *)NULL, _1));
}
void
@@ -97,7 +96,7 @@ DynamicSql::SqlFilter::bindParams(DB::Command * cmd, unsigned int & offset) cons
}
}
-DynamicSql::SqlParameter::SqlParameter(const xmlpp::Element * n) :
+DynamicSql::SqlParameter::SqlParameter(ScriptNodePtr n) :
Variable(n, boost::optional<Glib::ustring>("local"))
{
}
@@ -114,8 +113,8 @@ DynamicSql::SqlParameter::bindParams(DB::Command * cmd, unsigned int & offset) c
boost::apply_visitor<const SqlVariableBinder, const VariableType>(SqlVariableBinder(cmd, offset++), (*this));
}
-DynamicSql::SqlText::SqlText(const xmlpp::TextNode * n) :
- text(n->get_content())
+DynamicSql::SqlText::SqlText(const Glib::ustring & n) :
+ text(n)
{
}
diff --git a/project2/sql/sqlWriter.h b/project2/sql/sqlWriter.h
index 7693e19..4b57fa9 100644
--- a/project2/sql/sqlWriter.h
+++ b/project2/sql/sqlWriter.h
@@ -2,7 +2,6 @@
#define SQLWRITER_H
#include <intrusivePtrBase.h>
-#include <libxml++/nodes/textnode.h>
#include <command.h>
#include <glibmm/ustring.h>
#include <list>
@@ -22,7 +21,7 @@ namespace DynamicSql {
};
class SqlText : public SqlWriter {
public:
- SqlText(const xmlpp::TextNode *);
+ SqlText(const Glib::ustring &);
virtual void writeSql(Glib::ustring & sql) const;
virtual void bindParams(DB::Command *, unsigned int & offset) const;
@@ -30,13 +29,13 @@ namespace DynamicSql {
};
class SqlParameter : public SqlWriter, Variable {
public:
- SqlParameter(const xmlpp::Element *);
+ SqlParameter(ScriptNodePtr);
virtual void writeSql(Glib::ustring & sql) const;
virtual void bindParams(DB::Command *, unsigned int & offset) const;
};
class SqlFilter : public SqlWriter {
public:
- SqlFilter(const xmlpp::Element *);
+ SqlFilter(ScriptNodePtr);
virtual void writeSql(Glib::ustring & sql) const;
virtual void bindParams(DB::Command *, unsigned int & offset) const;
@@ -48,7 +47,7 @@ namespace DynamicSql {
typedef boost::intrusive_ptr<SqlFilter> SqlFilterPtr;
class SqlCommand : public SqlWriter {
public:
- SqlCommand(const xmlpp::Element *);
+ SqlCommand(ScriptNodePtr);
virtual void writeSql(Glib::ustring & sql) const;
virtual void bindParams(DB::Command *, unsigned int & offset) const;
typedef std::multimap<Glib::ustring, SqlFilterPtr> Filters;