00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 #ifndef _CONNECTION_H
00054 #define _CONNECTION_H
00055
00056
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00085 class DOConnection
00086 {
00087
00088 public:
00089 DOQuery * _firstQuery;
00090 DOQuery * _lastQuery;
00091 int _countQuery;
00092
00093 protected:
00094 void AddQueryFirst(DOQuery* item);
00095 void AddQueryLast(DOQuery* item);
00096 void AddQueryAfter(DOQuery* item, DOQuery* pos);
00097 void AddQueryBefore(DOQuery* item, DOQuery* pos);
00098 void RemoveQuery(DOQuery* item);
00099 void ReplaceQuery(DOQuery* item, DOQuery* newItem);
00100
00101 public:
00102 void DeleteAllQuery();
00103 DOQuery* GetFirstQuery() const;
00104 DOQuery* GetLastQuery() const;
00105 DOQuery* GetNextQuery(DOQuery* pos) const;
00106 DOQuery* GetPrevQuery(DOQuery* pos) const;
00107 int GetQueryCount() const;
00108 void MoveQueryFirst(DOQuery* item);
00109 void MoveQueryLast(DOQuery* item);
00110 void MoveQueryAfter(DOQuery* item, DOQuery* pos);
00111 void MoveQueryBefore(DOQuery* item, DOQuery* pos);
00112 void SortQuery(int (*comp)(DOQuery*, DOQuery*));
00113
00114 class QueryIterator
00115 {
00116 private:
00117 DOQuery* _refQuery;
00118 DOQuery* _prevQuery;
00119 DOQuery* _nextQuery;
00120 const DOConnection* _iterConnection;
00121
00122 QueryIterator* _prev;
00123 QueryIterator* _next;
00124
00125 int (DOQuery::*_method)() const;
00126
00127 static QueryIterator* _first;
00128 static QueryIterator* _last;
00129
00130 public:
00131 QueryIterator(const DOConnection* iterConnection,
00132 int (DOQuery::*method)() const = 0,
00133 DOQuery* refQuery = 0);
00134 QueryIterator(const DOConnection& iterConnection,
00135 int (DOQuery::*method)() const = 0,
00136 DOQuery* refQuery = 0);
00137 QueryIterator(const QueryIterator& iterator,
00138 int (DOQuery::*method)() const = 0);
00139 ~QueryIterator();
00140
00141 QueryIterator& operator= (const QueryIterator& iterator)
00142 {
00143 _iterConnection = iterator._iterConnection;
00144 _refQuery = iterator._refQuery;
00145 _prevQuery = iterator._prevQuery;
00146 _nextQuery = iterator._nextQuery;
00147 _method = iterator._method;
00148 return *this;
00149 }
00150 DOQuery* operator++ ()
00151 {
00152 _nextQuery = _iterConnection->GetNextQuery(_nextQuery);
00153 if (_method != 0)
00154 {
00155 while (_nextQuery && !(_nextQuery->*_method)())
00156 _nextQuery = _iterConnection->GetNextQuery(_nextQuery);
00157 }
00158 _refQuery = _prevQuery = _nextQuery;
00159 return _refQuery;
00160 }
00161 DOQuery* operator-- ()
00162 {
00163 _prevQuery = _iterConnection->GetPrevQuery(_prevQuery);
00164 if (_method != 0)
00165 {
00166 while (_prevQuery && !(_prevQuery->*_method)())
00167 _prevQuery = _iterConnection->GetPrevQuery(_prevQuery);
00168 }
00169 _refQuery = _nextQuery = _prevQuery;
00170 return _refQuery;
00171 }
00172 operator DOQuery*() { return _refQuery; }
00173 DOQuery* operator-> () { return _refQuery; }
00174 DOQuery* Get() { return _refQuery; }
00175 void Reset() { _refQuery = _prevQuery = _nextQuery = (DOQuery*)0; }
00176
00177 int IsLast() { return (_iterConnection->GetLastQuery() == _refQuery); }
00178 int IsFirst() { return (_iterConnection->GetFirstQuery() == _refQuery); }
00179
00180 static void Check(DOQuery* itemQuery);
00181 static void Check(DOQuery* itemQuery, DOQuery* newItemQuery);
00182 };
00183
00184
00185
00186
00187
00188 private:
00189 MYSQL m_handle;
00190
00191 protected:
00192
00193 public:
00194 CString m_hostname;
00195 CString m_password;
00196 CString m_username;
00197 CString m_database;
00198
00199
00200 private:
00201 void ConstructorInclude();
00202 void DestructorInclude();
00203
00204 protected:
00205
00206 public:
00207 DOConnection();
00208 virtual ~DOConnection();
00209 virtual void Connect();
00210 MYSQL* GetHdl();
00211 };
00212
00213 #endif
00214
00215
00216 #ifdef CB_INLINES
00217 #ifndef _CONNECTION_H_INLINES
00218 #define _CONNECTION_H_INLINES
00219
00220
00221
00222
00223 #endif
00224 #endif
00225