Go to the documentation of this file.00001 #ifndef DATABASE_H
00002 #define DATABASE_H
00003
00004 #include <QSqlDatabase>
00005 class QueryThreadCommand;
00006 class QueryThreadConnSpecs;
00007
00008 QSqlDatabase createConnection(const QueryThreadConnSpecs &specs, const char *connName);
00009 void connectToDatabase(QSqlDatabase db);
00010
00011 #include <QObject>
00012 #include "querythread.h"
00013 #include "progresswidget.h"
00014
00021 class Database : public QObject
00022 {
00023 Q_OBJECT
00024 public:
00025 static Database *instance();
00026 static QSqlDatabase staticCon();
00027 static QSqlQuery execStatic(const QString &query = QString());
00028 static QSqlRecord execStaticR(const QString &query);
00029 void execThreaded(const QString &query, const QObject *sender);
00030 void execThreaded(const QueryThreadCommand &cmd);
00031 static ProgressToolBar *progressToolBar();
00032 static bool execPending(const QObject *sender);
00033 static QSqlIndex lastInserted(const QString &tableName);
00034
00035 static void listenForTableChange(const QString &tableName);
00036 static void notifyTableChange(const QString &tableName);
00037
00038 private:
00039 void threadSetup(const QString &driver, const QString &dbName, const QString &host,
00040 const QString &user, const QString &passwd, int port);
00041 void cancelQuery(const QObject *sender);
00042
00043 public slots:
00044 void slot_queryThreadResult(QueryThreadCommand result);
00045 void pipe_queryResult(QSqlQuery*);
00046
00047 protected:
00048 Database();
00049 Database(const QString &driver, const QString &dbName, const QString &host,
00050 const QString &user, const QString &passwd, int port);
00051 ~Database();
00052
00053 protected slots:
00054 void onDriverNotification(const QString & name);
00055
00056 signals:
00057 void signal_queryQueue_changed(QueryQueue *queue);
00058 void tableChanged(const QString &tableName);
00059
00060 private:
00061 QueryQueue queryQueue;
00062 QueryThread *thread;
00063 ProgressToolBar *m_progressToolBar;
00064 };
00065
00069 class SqlHelper
00070 {
00071 public:
00072 void setDependency(const QString &tableName);
00073 void setDependencies(const QStringList &tableNames);
00074 void setRowIdentifierField(const QString &fieldName);
00075 QString rowIdentifierField() const;
00076
00077 void clearDependencies();
00078 const QStringList &dependencies() const;
00079
00080 protected:
00081 SqlHelper(){};
00082 virtual void onTableChange(const QString &tableName) = 0;
00083
00084 private:
00085 QStringList m_dependencies;
00086 QString m_rowIdentifierField;
00087 };
00088
00089 #include <QSqlQueryModel>
00090
00094 class SqlQueryModel : public QSqlQueryModel, public SqlHelper
00095 {
00096 Q_OBJECT
00097 public:
00098 SqlQueryModel(QObject *parent = 0);
00099
00100 bool contains(const QString &value, const int column = 0) const ;
00101 bool contains(const QMap<int, QString> &columnToStringMap) const ;
00102
00103 public slots:
00104 virtual void clear();
00105
00106 void reQuery();
00107
00108 private slots:
00109 virtual void onTableChange(const QString &tableName);
00110
00111 private:
00112 };
00113
00114 #include <QSqlRelationalTableModel>
00115
00119 class SqlTableModel : public QSqlRelationalTableModel, public SqlHelper
00120 {
00121 Q_OBJECT
00122 public:
00123 SqlTableModel(QObject *parent = 0, QSqlDatabase db = QSqlDatabase());
00124 virtual void queryChange();
00125 void setTable(const QString &table);
00126
00127 private slots:
00128 virtual void onTableChange(const QString &tableName);
00129
00130 signals:
00131 void queryChanged();
00132 };
00133
00134 #include <QWidget>
00135 class QTableView;
00136
00140 class DatabaseAuditLogView : public QWidget
00141 {
00142 Q_OBJECT
00143 public:
00144 DatabaseAuditLogView(QWidget *parent = 0);
00145 static const QString staticWindowTitle();
00146
00147 public slots:
00148 void pipe_queryResult(QSqlQuery* result);
00149 void updateModel();
00150
00151 private:
00152 const QString baseQuery;
00153 QTableView *logView;
00154 };
00155
00156 #endif // DATABASE_H