00001 #ifndef MYTHDBCON_H_ 00002 #define MYTHDBCON_H_ 00003 00004 #include <qsqldatabase.h> 00005 #include <qmutex.h> 00006 #include <qsemaphore.h> 00007 #include <qstring.h> 00008 #include <qptrlist.h> 00009 00010 #include <iostream> 00011 using namespace std; 00012 00013 #include "mythcontext.h" 00014 00016 class MPUBLIC MSqlDatabase 00017 { 00018 friend class MDBManager; 00019 friend class MSqlQuery; 00020 public: 00021 MSqlDatabase(const QString &name); 00022 ~MSqlDatabase(void); 00023 00024 private: 00025 bool isOpen(void); 00026 bool OpenDatabase(void); 00027 bool KickDatabase(void); 00028 QSqlDatabase *db(void) { return m_db; } 00029 00030 private: 00031 QString m_name; 00032 QSqlDatabase *m_db; 00033 QDateTime m_lastDBKick; 00034 }; 00035 00037 class MDBManager 00038 { 00039 friend class MSqlQuery; 00040 public: 00041 MDBManager(void); 00042 ~MDBManager(void); 00043 00044 void CloseDatabases(void); 00045 00046 protected: 00047 MSqlDatabase *popConnection(void); 00048 void pushConnection(MSqlDatabase *db); 00049 00050 MSqlDatabase *getSchedCon(void); 00051 MSqlDatabase *getDDCon(void); 00052 00053 private: 00054 QPtrList<MSqlDatabase> m_pool; 00055 QMutex m_lock; 00056 QSemaphore *m_sem; 00057 int m_connID; 00058 00059 MSqlDatabase *m_schedCon; 00060 MSqlDatabase *m_DDCon; 00061 }; 00062 00064 typedef struct _MSqlQueryInfo 00065 { 00066 MSqlDatabase *db; 00067 QSqlDatabase *qsqldb; 00068 bool returnConnection; 00069 } MSqlQueryInfo; 00070 00072 typedef QMap<QString, QVariant> MSqlBindings; 00073 00075 MPUBLIC void MSqlAddMoreBindings(MSqlBindings &output, MSqlBindings &addfrom); 00076 00078 MPUBLIC void MSqlEscapeAsAQuery(QString &query, MSqlBindings &bindings); 00079 00099 class MPUBLIC MSqlQuery : public QSqlQuery 00100 { 00101 public: 00103 MSqlQuery(const MSqlQueryInfo &qi); 00105 ~MSqlQuery(); 00106 00108 bool isConnected(void) { return m_isConnected; } 00109 00111 bool exec(void) { return QSqlQuery::exec(); } 00112 00114 bool exec(const QString &query); 00115 00117 bool prepare(const QString &query); 00118 00120 void bindValues(MSqlBindings &bindings); 00121 00130 QVariant lastInsertId(); 00131 00133 static bool testDBConnection(); 00134 00136 static MSqlQueryInfo InitCon(); 00137 00139 static MSqlQueryInfo SchedCon(); 00140 00142 static MSqlQueryInfo DDCon(); 00143 00144 private: 00145 MSqlDatabase *m_db; 00146 bool m_isConnected; 00147 bool m_returnConnection; 00148 }; 00149 00150 #endif
1.5.5