QxOrm  1.5.0
C++ Object Relational Mapping library

qx::QxSoftDelete : soft delete (or logical delete) behavior to update a row into database (flag it as deleted) instead of delete it from database More...

#include <QxSoftDelete.h>

List of all members.

Public Types

enum  mode { mode_flag, mode_date_time }

Public Member Functions

 QxSoftDelete ()
 QxSoftDelete (const QString &sColumn)
 QxSoftDelete (const QString &sColumn, mode eMode)
 ~QxSoftDelete ()
QString getTableName () const
QString getColumnName () const
QString getSqlQueryToFetch () const
QString getSqlQueryToUpdate () const
QString getSqlQueryToCreateTable () const
mode getMode () const
bool getSqlFetchInJoin () const
void setTableName (const QString &sTable)
void setColumnName (const QString &sColumn)
void setSqlQueryToFetch (const QString &s)
void setSqlQueryToUpdate (const QString &s)
void setSqlQueryToCreateTable (const QString &s)
void setMode (mode eMode)
void setSqlFetchInJoin (bool b)
bool isEmpty () const
QString buildSqlTablePointName (const QString &sTable=QString()) const
QString buildSqlQueryToFetch (const QString &sTable=QString()) const
QString buildSqlQueryToUpdate () const
QString buildSqlQueryToCreateTable () const

Private Attributes

QString m_sTable
 Table name where soft delete behavior is applied.
QString m_sColumn
 Column name to store soft delete information.
QString m_sSqlQueryToFetch
 Overrided user SQL query to fetch an item, if empty QxOrm library builds a default SQL query.
QString m_sSqlQueryToUpdate
 Overrided user SQL query to update an item, if empty QxOrm library builds a default SQL query.
QString m_sSqlQueryToCreateTable
 Overrided user SQL query to create table, if empty QxOrm library builds a default SQL query.
mode m_eMode
 Soft delete mode : 'mode_flag' with a boolean column, 'mode_date_time' with a date-time column containing deletion date-time.
bool m_bFetchInJoin
 Add SQL condition to fetch in the JOIN part (default value), for backward compatibility with previous versions of QxOrm library set this value to false (means fetch in the WHERE part)

Detailed Description

qx::QxSoftDelete : soft delete (or logical delete) behavior to update a row into database (flag it as deleted) instead of delete it from database

A soft delete doesn't remove rows from database (this is not a physical delete) : a new column is added to the table definition to flag a row as deleted or not. This column can contain a boolean (1 means row deleted, 0 or NULL means row not deleted), or can contain deletion date-time (if empty or NULL, row is not deleted). So you can reactivate a deleted row by setting NULL or empty value into database.

To define a soft delete behavior with QxOrm library, you have to use the class qx::QxSoftDelete in function mapping by class qx::register_class<T>. Here is an example with the class Bar containing 2 properties m_id and m_desc :

namespace qx {
template <> void register_class(QxClass<Bar> & t)
{
   t.setSoftDelete(qx::QxSoftDelete("deleted_at"));

   t.id(& Bar::m_id, "id");
   t.data(& Bar::m_desc, "desc");
}}

SQL queries builded by QxOrm library will take into account this soft delete parameter to add conditions (don't fetch deleted item, don't delete physically a row, etc.). For example, if you execute this code with the class Bar :

Bar_ptr pBar; pBar.reset(new Bar());
pBar->setId(5);
QSqlError daoError = qx::dao::delete_by_id(pBar);     qAssert(! daoError.isValid());
qx_bool bDaoExist = qx::dao::exist(pBar);             qAssert(! bDaoExist);
daoError = qx::dao::delete_all<Bar>();                qAssert(! daoError.isValid());
long lBarCount = qx::dao::count<Bar>();               qAssert(lBarCount == 0);
daoError = qx::dao::destroy_all<Bar>();               qAssert(! daoError.isValid());

You will obtain following output trace :

[QxOrm] sql query (93 ms) : UPDATE Bar SET deleted_at = '20110617115148615' WHERE id = :id
[QxOrm] sql query (0 ms) : SELECT Bar.id AS Bar_id_0, Bar.deleted_at FROM Bar WHERE Bar.id = :id AND (Bar.deleted_at IS NULL OR Bar.deleted_at = '')
[QxOrm] sql query (78 ms) : UPDATE Bar SET deleted_at = '20110617115148724'
[QxOrm] sql query (0 ms) : SELECT COUNT(*) FROM Bar WHERE (Bar.deleted_at IS NULL OR Bar.deleted_at = '')
[QxOrm] sql query (110 ms) : DELETE FROM Bar

Note : To delete physically a row from database, you have to use followings functions : qx::dao::destroy_by_id() and qx::dao::destroy_all().

Other note : it is recommended to define into database an index on column deleted_at to optimize execution of SQL queries.

Definition at line 96 of file QxSoftDelete.h.


Member Enumeration Documentation

Enumerator:
mode_flag 
mode_date_time 

Definition at line 101 of file QxSoftDelete.h.


Constructor & Destructor Documentation

qx::QxSoftDelete::QxSoftDelete ( )
qx::QxSoftDelete::QxSoftDelete ( const QString &  sColumn)
qx::QxSoftDelete::QxSoftDelete ( const QString &  sColumn,
mode  eMode 
)
qx::QxSoftDelete::~QxSoftDelete ( )

Member Function Documentation

QString qx::QxSoftDelete::buildSqlQueryToCreateTable ( ) const
QString qx::QxSoftDelete::buildSqlQueryToFetch ( const QString &  sTable = QString()) const
QString qx::QxSoftDelete::buildSqlQueryToUpdate ( ) const
QString qx::QxSoftDelete::buildSqlTablePointName ( const QString &  sTable = QString()) const
QString qx::QxSoftDelete::getColumnName ( ) const
mode qx::QxSoftDelete::getMode ( ) const
bool qx::QxSoftDelete::getSqlFetchInJoin ( ) const
QString qx::QxSoftDelete::getSqlQueryToCreateTable ( ) const
QString qx::QxSoftDelete::getSqlQueryToFetch ( ) const
QString qx::QxSoftDelete::getSqlQueryToUpdate ( ) const
QString qx::QxSoftDelete::getTableName ( ) const
bool qx::QxSoftDelete::isEmpty ( ) const
void qx::QxSoftDelete::setColumnName ( const QString &  sColumn)
void qx::QxSoftDelete::setMode ( mode  eMode)
void qx::QxSoftDelete::setSqlFetchInJoin ( bool  b)
void qx::QxSoftDelete::setSqlQueryToCreateTable ( const QString &  s)
void qx::QxSoftDelete::setSqlQueryToFetch ( const QString &  s)
void qx::QxSoftDelete::setSqlQueryToUpdate ( const QString &  s)
void qx::QxSoftDelete::setTableName ( const QString &  sTable)

Member Data Documentation

Add SQL condition to fetch in the JOIN part (default value), for backward compatibility with previous versions of QxOrm library set this value to false (means fetch in the WHERE part)

Definition at line 111 of file QxSoftDelete.h.

Soft delete mode : 'mode_flag' with a boolean column, 'mode_date_time' with a date-time column containing deletion date-time.

Definition at line 110 of file QxSoftDelete.h.

QString qx::QxSoftDelete::m_sColumn [private]

Column name to store soft delete information.

Definition at line 106 of file QxSoftDelete.h.

Overrided user SQL query to create table, if empty QxOrm library builds a default SQL query.

Definition at line 109 of file QxSoftDelete.h.

Overrided user SQL query to fetch an item, if empty QxOrm library builds a default SQL query.

Definition at line 107 of file QxSoftDelete.h.

Overrided user SQL query to update an item, if empty QxOrm library builds a default SQL query.

Definition at line 108 of file QxSoftDelete.h.

QString qx::QxSoftDelete::m_sTable [private]

Table name where soft delete behavior is applied.

Definition at line 105 of file QxSoftDelete.h.


The documentation for this class was generated from the following file: