| QxOrm 1.4.5 C++ Object Relational Mapping library

- Main Page
- Modules
- Namespaces
- Classes
- Files
- Directories

- File List
- File Members

IxDao_Helper.h
Go to the documentation of this file.

    00001 /****************************************************************************
    00002 **
    00003 ** https://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 _IX_DAO_HELPER_H_
    00033 #define _IX_DAO_HELPER_H_
    00034
    00035 #ifdef _MSC_VER
    00036 #pragma once
    00037 #endif
    00038
    00046 #include <QtSql/qsqldatabase.h>
    00047 #include <QtSql/qsqlquery.h>
    00048 #include <QtSql/qsqlerror.h>
    00049 #include <QtSql/qsqldriver.h>
    00050 #include <QtSql/qsqlrecord.h>
    00051
    00052 #include <QxTraits/get_primary_key.h>
    00053 #include <QxTraits/is_valid_primary_key.h>
    00054
    00055 #include <QxDao/QxSqlDatabase.h>
    00056 #include <QxDao/IxSqlQueryBuilder.h>
    00057 #include <QxDao/QxSqlQuery.h>
    00058 #include <QxDao/IxSqlRelation.h>
    00059 #include <QxDao/QxSqlRelationLinked.h>
    00060
    00061 #include <QxDao/QxSqlGenerator/IxSqlGenerator.h>
    00062
    00063 #include <QxCollection/QxCollection.h>
    00064
    00065 #include <QxDataMember/IxDataMemberX.h>
    00066
    00067 #include <QxValidator/QxInvalidValueX.h>
    00068 #include <QxValidator/QxValidatorError.h>
    00069
    00070 namespace qx {
    00071 template <class T>
    00072 QxInvalidValueX validate(T & t, const QString & group);
    00073 } // namespace qx
    00074
    00075 namespace qx {
    00076 namespace dao {
    00077 namespace detail {
    00078
    00083 class QX_DLL_EXPORT IxDao_Helper
    00084 {
    00085
    00086 private:
    00087
    00088    struct IxDao_HelperImpl;
    00089    std::unique_ptr<IxDao_HelperImpl> m_pImpl;
    00090
    00091 protected:
    00092
    00093    IxDao_Helper(qx::IxSqlQueryBuilder * pBuilder);
    00094    virtual ~IxDao_Helper();
    00095
    00096 public:
    00097
    00098    bool isValid() const;
    00099    bool hasFeature(QSqlDriver::DriverFeature ft) const;
    00100
    00101    QSqlDatabase & database();
    00102    const QSqlDatabase & database() const;
    00103    QSqlQuery & query();
    00104    const QSqlQuery & query() const;
    00105    QSqlError & error();
    00106    const QSqlError & error() const;
    00107    qx::QxSqlQuery & qxQuery();
    00108    const qx::QxSqlQuery & qxQuery() const;
    00109    qx::IxSqlQueryBuilder & builder();
    00110    const qx::IxSqlQueryBuilder & builder() const;
    00111    qx::IxDataMemberX * getDataMemberX() const;
    00112    long getDataCount() const;
    00113    qx::IxDataMember * getDataId() const;
    00114    qx::IxDataMember * nextData(long & l) const;
    00115    QString sql() const;
    00116    qx::QxSqlRelationLinked * getSqlRelationLinked() const;
    00117    bool getCartesianProduct() const;
    00118    QStringList getSqlColumns() const;
    00119    void setSqlColumns(const QStringList & lst);
    00120    IxSqlGenerator * getSqlGenerator() const;
    00121    void addInvalidValues(const qx::QxInvalidValueX & lst);
    00122    bool getAddAutoIncrementIdToUpdateQuery() const;
    00123    QStringList & itemsAsJson();
    00124    bool isReadOnly() const;
    00125    bool isMongoDB() const;
    00126
    00127    QSqlError errFailed(bool bPrepare = false);
    00128    QSqlError errEmpty();
    00129    QSqlError errNoData();
    00130    QSqlError errInvalidId();
    00131    QSqlError errInvalidRelation();
    00132    QSqlError errReadOnly();
    00133
    00134    bool transaction();
    00135    bool nextRecord();
    00136    void quiet();
    00137    bool exec();
    00138    bool prepare(QString & sql);
    00139
    00140    QSqlError updateError(const QSqlError & error);
    00141    bool updateSqlRelationX(const QStringList & relation);
    00142    void addQuery(const qx::QxSqlQuery & query, bool bResolve);
    00143    void setTimeDatabase(int ms);
    00144    void dumpRecord() const;
    00145
    00146    template <class U>
    00147    inline bool isValidPrimaryKey(const U & u)
    00148    { return (getDataId() && qx::trait::is_valid_primary_key(getDataId()->toVariant((& u), -1, qx::cvt::context::e_database))); }
    00149
    00150    template <class U>
    00151    inline void updateLastInsertId(U & u)
    00152    {
    00153       if (getDataId() && getDataId()->getAutoIncrement() && this->hasFeature(QSqlDriver::LastInsertId))
    00154       { getDataId()->fromVariant((& u), query().lastInsertId(), -1, qx::cvt::context::e_database); }
    00155    }
    00156
    00157    template <class U>
    00158    inline bool validateInstance(U & u)
    00159    {
    00160       qx::QxInvalidValueX invalidValues = qx::validate(u, "");
    00161       this->addInvalidValues(invalidValues);
    00162       return (invalidValues.count() <= 0);
    00163    }
    00164
    00165 protected:
    00166
    00167    void dumpBoundValues() const;
    00168    QSqlError updateError(const QString & sError);
    00169    void init(QSqlDatabase * pDatabase, const QString & sContext);
    00170    void terminate();
    00171
    00172 };
    00173
    00174 } // namespace detail
    00175 } // namespace dao
    00176 } // namespace qx
    00177
    00178 #endif // _IX_DAO_HELPER_H_