diff options
| author | randomdan <randomdan@localhost> | 2011-02-19 17:01:55 +0000 | 
|---|---|---|
| committer | randomdan <randomdan@localhost> | 2011-02-19 17:01:55 +0000 | 
| commit | a36be7f6f3540ffd99ae0eb50a36002f06c27be5 (patch) | |
| tree | a306b9fc1fc317cc1abd1e6d01517628b9ecf3ae | |
| parent | Pass null values to presenters, it's up to them what to do with them (diff) | |
| download | project2-a36be7f6f3540ffd99ae0eb50a36002f06c27be5.tar.bz2 project2-a36be7f6f3540ffd99ae0eb50a36002f06c27be5.tar.xz project2-a36be7f6f3540ffd99ae0eb50a36002f06c27be5.zip  | |
Use a smart pointer to ensure sqlRows query handle is always deleted
Add CommonObjects destructor to ensure rowSets are cleared before datasources
| -rw-r--r-- | project2/commonObjects.cpp | 6 | ||||
| -rw-r--r-- | project2/commonObjects.h | 2 | ||||
| -rw-r--r-- | project2/sqlRows.cpp | 6 | ||||
| -rw-r--r-- | project2/sqlRows.h | 3 | 
4 files changed, 12 insertions, 5 deletions
diff --git a/project2/commonObjects.cpp b/project2/commonObjects.cpp index 2ca4846..89eb913 100644 --- a/project2/commonObjects.cpp +++ b/project2/commonObjects.cpp @@ -2,6 +2,12 @@  #include <libxml++/parsers/domparser.h>  #include <libxml/xinclude.h> +CommonObjects::~CommonObjects() +{ +	rowSets.clear(); +	datasources.clear(); +} +  RowSetPtr  CommonObjects::getSource(const std::string & name) const  { diff --git a/project2/commonObjects.h b/project2/commonObjects.h index a15a8da..32be835 100644 --- a/project2/commonObjects.h +++ b/project2/commonObjects.h @@ -9,6 +9,8 @@ class CommonObjects : public virtual IntrusivePtrBase {  		SimpleMessageException(DataSourceNotFound);  		SimpleMessageException(DataSourceNotCompatible); +		virtual ~CommonObjects(); +  		RowSetPtr getSource(const std::string &) const;  		template <class DataSourceType>  		const DataSourceType * dataSource(const std::string & name) const diff --git a/project2/sqlRows.cpp b/project2/sqlRows.cpp index 22dafa9..5a57fc7 100644 --- a/project2/sqlRows.cpp +++ b/project2/sqlRows.cpp @@ -19,7 +19,6 @@ SqlRows::SqlRows(const xmlpp::Element * p) :  	RowSet(p),  	dataSource(p, "datasource"),  	sqlCommand(dynamic_cast<xmlpp::Element *>(p->get_children("sql").front())), -	query(NULL),  	db(NULL)  {  } @@ -110,13 +109,12 @@ SqlRows::execute(const RowProcessor * rp) const  	unsigned int offset = 0;  	Glib::ustring sql;  	sqlCommand.writeSql(sql); -	query = db->getReadonly().newSelectCommand(sql); -	sqlCommand.bindParams(rp, query, offset); +	query = SelectPtr(db->getReadonly().newSelectCommand(sql)); +	sqlCommand.bindParams(rp, query.get(), offset);  	while (query->fetch()) {  		rp->rowReady();  		rowNum += 1;  	} -	delete query;  }  SqlRows::SqlWriter::SqlWriter() diff --git a/project2/sqlRows.h b/project2/sqlRows.h index a1f4fab..099a56b 100644 --- a/project2/sqlRows.h +++ b/project2/sqlRows.h @@ -78,7 +78,8 @@ class SqlRows : public RowSet {  				Writers writers;  		};  		SqlCommand sqlCommand; -		mutable DB::SelectCommand * query; +		typedef boost::shared_ptr<DB::SelectCommand> SelectPtr; +		mutable SelectPtr query;  		const RdbmsDataSource * db;  };  | 
