QxOrm  1.2.6
C++ Object Relational Mapping library
QxSoftDelete.h
Go to the documentation of this file.
00001 /****************************************************************************
00002 **
00003 ** http://www.qxorm.com/
00004 ** Copyright (C) 2013 Lionel Marty (contact@qxorm.com)
00005 **
00006 ** This file is part of the QxOrm library
00007 **
00008 ** This software is provided 'as-is', without any express or implied
00009 ** warranty. In no event will the authors be held liable for any
00010 ** damages arising from the use of this software
00011 **
00012 ** Commercial Usage
00013 ** Licensees holding valid commercial QxOrm licenses may use this file in
00014 ** accordance with the commercial license agreement provided with the
00015 ** Software or, alternatively, in accordance with the terms contained in
00016 ** a written agreement between you and Lionel Marty
00017 **
00018 ** GNU General Public License Usage
00019 ** Alternatively, this file may be used under the terms of the GNU
00020 ** General Public License version 3.0 as published by the Free Software
00021 ** Foundation and appearing in the file 'license.gpl3.txt' included in the
00022 ** packaging of this file. Please review the following information to
00023 ** ensure the GNU General Public License version 3.0 requirements will be
00024 ** met : http://www.gnu.org/copyleft/gpl.html
00025 **
00026 ** If you are unsure which license is appropriate for your use, or
00027 ** if you have questions regarding the use of this file, please contact :
00028 ** contact@qxorm.com
00029 **
00030 ****************************************************************************/
00031 
00032 #ifndef _QX_SOFT_DELETE_H_
00033 #define _QX_SOFT_DELETE_H_
00034 
00035 #ifdef _MSC_VER
00036 #pragma once
00037 #endif
00038 
00046 #define QX_DAO_SOFT_DELETE_QDATETIME_FORMAT "yyyyMMddhhmmsszzz"
00047 
00048 namespace qx {
00049 
00096 class QxSoftDelete
00097 {
00098 
00099 public:
00100 
00101    enum mode { mode_flag, mode_date_time };
00102 
00103 private:
00104 
00105    QString m_sTable;                      
00106    QString m_sColumn;                     
00107    QString m_sSqlQueryToFetch;            
00108    QString m_sSqlQueryToUpdate;           
00109    QString m_sSqlQueryToCreateTable;      
00110    mode m_eMode;                          
00111 
00112 public:
00113 
00114    QxSoftDelete() : m_eMode(mode_date_time) { ; }
00115    QxSoftDelete(const QString & sColumn) : m_sColumn(sColumn), m_eMode(mode_date_time) { ; }
00116    QxSoftDelete(const QString & sColumn, mode eMode) : m_sColumn(sColumn), m_eMode(eMode) { ; }
00117    ~QxSoftDelete() { ; }
00118 
00119    QString getTableName() const              { return m_sTable; }
00120    QString getColumnName() const             { return m_sColumn; }
00121    QString getSqlQueryToFetch() const        { return m_sSqlQueryToFetch; }
00122    QString getSqlQueryToUpdate() const       { return m_sSqlQueryToUpdate; }
00123    QString getSqlQueryToCreateTable() const  { return m_sSqlQueryToCreateTable; }
00124    mode getMode() const                      { return m_eMode; }
00125 
00126    void setTableName(const QString & sTable)          { m_sTable = sTable; }
00127    void setColumnName(const QString & sColumn)        { m_sColumn = sColumn; }
00128    void setSqlQueryToFetch(const QString & s)         { m_sSqlQueryToFetch = s; }
00129    void setSqlQueryToUpdate(const QString & s)        { m_sSqlQueryToUpdate = s; }
00130    void setSqlQueryToCreateTable(const QString & s)   { m_sSqlQueryToCreateTable = s; }
00131    void setMode(mode eMode)                           { m_eMode = eMode; }
00132 
00133    bool isEmpty() const { return (m_sTable.isEmpty() || m_sColumn.isEmpty()); }
00134 
00135    QString buildSqlTablePointName(const QString & sTable = QString()) const
00136    {
00137       if (this->isEmpty()) { return ""; }
00138       return ((sTable.isEmpty() ? m_sTable : sTable) + "." + m_sColumn);
00139    }
00140 
00141    QString buildSqlQueryToFetch(const QString & sTable = QString()) const
00142    {
00143       QString sCurrTable = (sTable.isEmpty() ? m_sTable : sTable);
00144       if (this->isEmpty()) { return ""; }
00145       else if (! m_sSqlQueryToFetch.isEmpty()) { return m_sSqlQueryToFetch; }
00146       else if (m_eMode == mode_flag) { return ("(" + sCurrTable + "." + m_sColumn + " IS NULL" + " OR " + sCurrTable + "." + m_sColumn + " = ''" + " OR " + sCurrTable + "." + m_sColumn + " = '0'" + ")"); }
00147       else if (m_eMode == mode_date_time) { return ("(" + sCurrTable + "." + m_sColumn + " IS NULL" + " OR " + sCurrTable + "." + m_sColumn + " = ''" + ")"); }
00148       qAssert(false); return "";
00149    }
00150 
00151    QString buildSqlQueryToUpdate() const
00152    {
00153       if (this->isEmpty()) { return ""; }
00154       else if (! m_sSqlQueryToUpdate.isEmpty()) { return m_sSqlQueryToUpdate; }
00155       else if (m_eMode == mode_flag) { return (m_sColumn + " = '1'"); }
00156       else if (m_eMode == mode_date_time) { return (m_sColumn + " = '" + QDateTime::currentDateTime().toString(QX_DAO_SOFT_DELETE_QDATETIME_FORMAT) + "'"); }
00157       qAssert(false); return "";
00158    }
00159 
00160    QString buildSqlQueryToCreateTable() const
00161    {
00162       if (this->isEmpty()) { return ""; }
00163       else if (! m_sSqlQueryToCreateTable.isEmpty()) { return m_sSqlQueryToCreateTable; }
00164       else if (m_eMode == mode_flag) { return (m_sColumn + " " + "TEXT"); }
00165       else if (m_eMode == mode_date_time) { return (m_sColumn + " " + "TEXT"); }
00166       qAssert(false); return "";
00167    }
00168 
00169 };
00170 
00171 } // namespace qx
00172 
00173 #endif // _QX_SOFT_DELETE_H_