全て クラス 名前空間 関数 変数 型定義 列挙型 列挙値 フレンド ページ
databaseManager.h
1 #ifndef BZS_DB_PROTOCOL_TDAP_CLIENT_DATABASEMANAGER_H
2 #define BZS_DB_PROTOCOL_TDAP_CLIENT_DATABASEMANAGER_H
3 /*=================================================================
4  Copyright (C) 2014 BizStation Corp All rights reserved.
5 
6  This program is free software; you can redistribute it and/or
7  modify it under the terms of the GNU General Public License
8  as published by the Free Software Foundation; either version 2
9  of the License, or (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program; if not, write to the Free Software
18  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
19  02111-1307, USA.
20 =================================================================*/
21 #include "trdboostapi.h"
22 #include <vector>
23 
24 namespace bzs
25 {
26 namespace db
27 {
28 namespace protocol
29 {
30 namespace tdap
31 {
32 namespace client
33 {
34 
35 /* Single database inplemantation idatabaseManager
36 */
37 
38 class databaseManager : public idatabaseManager, private boost::noncopyable
39 {
40  database_ptr m_dbPtr;
41  database* m_db;
42  std::vector<table_ptr> m_tables;
43  int findTable(const _TCHAR* name)
44  {
45  for (int i = 0; i < (int)m_tables.size(); ++i)
46  if (_tcscmp(m_tables[i]->tableDef()->tableName(), name) == 0)
47  return i;
48  return -1;
49  }
50 
51  void connect(const connectParams& param, bool newConnection = false)
52  {
53  if (!newConnection && m_db && m_db->isOpened())
54  return;
55  connectOpen(m_db, param, newConnection);
56  }
57 
58 public:
60  {
61  m_dbPtr = createDatabaseObject();
62  m_db = m_dbPtr.get();
63  }
64 
65  databaseManager(database_ptr db) : m_dbPtr(db), m_db(db.get()){};
66 
67  databaseManager(database* db) : m_db(db){};
68 
69  void reset(int) { m_db->close(); }
70 
71  table_ptr table(const _TCHAR* name)
72  {
73  int index = findTable(name);
74  if (index != -1)
75  return m_tables[index];
76  table_ptr t = openTable(m_db, name);
77  if (t)
78  m_tables.push_back(t);
79  return t;
80  }
81 
82  inline database* db() const { return m_db; }
83 
84  inline void use(const connectParams* param = NULL)
85  {
86  if (param)
87  connect(*param, false);
88  }
89 
90  inline void unUse(){};
91 
92  inline void setOption(__int64){};
93 
94  inline __int64 option() { return 0; };
95 
96  inline void beginTrn(short bias) { m_db->beginTrn(bias); };
97 
98  inline void endTrn() { m_db->endTrn(); }
99 
100  inline void abortTrn() { m_db->abortTrn(); }
101 
102  inline int enableTrn() { return m_db->enableTrn(); }
103 
104  inline void beginSnapshot(short bias = CONSISTENT_READ) { m_db->beginSnapshot(bias); }
105 
106  inline void endSnapshot() { m_db->endSnapshot(); }
107 
108  inline const _TCHAR* uri() const { return m_db->uri(); }
109 
110  inline char_td mode() const { return m_db->mode(); }
111 
112  inline bool isOpened() const { return m_db->isOpened(); }
113 
114  inline short_td stat() const { return m_db->stat(); }
115 
116  inline uchar_td* clientID() const { return m_db->clientID(); }
117 };
118 
119 /** @cond INTERNAL */
120 /* multi databases and a single thread inplemantation idatabaseManager
121 */
122 inline void releaseDatabaseDummy(database* p)
123 {
124 }
125 inline void releaseDbManagerDummy(idatabaseManager* p)
126 {
127 }
128 /** @endcond */
129 
130 /** Single thread distribution database manager */
131 class disbDbManager : public idatabaseManager, private boost::noncopyable
132 {
133  std::vector<database_ptr> m_dbs;
134  database* m_db;
135 
136  std::vector<table_ptr> m_tables;
137  int findTable(const _TCHAR* name)
138  {
139  for (int i = 0; i < (int)m_tables.size(); ++i)
140  if (_tcscmp(m_tables[i]->tableDef()->tableName(), name) == 0)
141  return i;
142  return -1;
143  }
144 
145  int findDbIndex(const connectParams* param) const
146  {
147  for (int i = 0; i < (int)m_dbs.size(); ++i)
148  if (isSameUri(param, m_dbs[i]))
149  return i;
150  return -1;
151  }
152 
153 public:
155  {
157  addDb(p);
158  }
159 
161  {
162  //No delete , because managing life cycle is db owner.
163  database_ptr d(db, releaseDatabaseDummy);
164  addDb(d);
165  }
166 
168 
169  void reset(int)
170  {
171  m_tables.clear();
172  m_dbs.clear();
174  addDb(p);
175  }
176 
177  // change currnt
179  {
180  m_dbs.push_back(db);
181  m_db = db.get();
182  return db;
183  }
184 
185  table_ptr table(const _TCHAR* name)
186  {
187  int index = findTable(name);
188  if (index != -1)
189  return m_tables[index];
190  table_ptr t = openTable(m_db, name);
191  if (t)
192  m_tables.push_back(t);
193  return t;
194  }
195 
196  database* db() const { return m_db; }
197 
198  inline void use(const connectParams* param = NULL)
199  {
200  if (param)
201  {
202  int index = findDbIndex(param);
203  if (index == -1)
204  {
206  addDb(p);
207  m_db = p.get();
208  connectOpen(m_db, *param, false);
209  }
210  else
211  m_db = m_dbs[index].get();
212  }
213  else
214  m_db = m_dbs[0].get();
215  }
216 
217  inline void unUse(){};
218 
219  inline const _TCHAR* uri() const { return m_db->uri(); }
220 
221  inline char_td mode() const { return m_db->mode(); }
222 
223  inline bool isOpened() const { return m_db->isOpened(); }
224 
225  inline void setOption(__int64){};
226 
227  inline __int64 option() { return 0; };
228 
229  inline void beginTrn(short bias)
230  {
231  for (size_t i = 0; i < m_dbs.size(); ++i)
232  {
233  m_dbs[i]->beginTrn(bias);
234  if (m_dbs[i]->stat())
235  {
236  abortTrn();
237  nstable::throwError(m_dbs[i]->uri(), m_dbs[i]->stat());
238  }
239  }
240  }
241 
242  inline void endTrn()
243  {
244  for (size_t i = 0; i < m_dbs.size(); ++i)
245  m_dbs[i]->endTrn();
246  }
247 
248  inline void abortTrn()
249  {
250  for (size_t i = 0; i < m_dbs.size(); ++i)
251  m_dbs[i]->abortTrn();
252  }
253 
254  inline int enableTrn() { return m_db->enableTrn(); }
255 
256  inline void beginSnapshot(short bias = CONSISTENT_READ) { m_db->beginSnapshot(bias); }
257 
258  inline void endSnapshot() { m_db->endSnapshot(); }
259 
260  inline short_td stat() const { return m_db->stat(); }
261 
262  inline uchar_td* clientID() const { return m_db->clientID(); }
263 };
264 /** @cond INTERNAL */
265 
266 template <>
268 {
269 #ifdef SWIGRUBY
270  dbmanager_ptr p(new databaseManager(), releaseDbManagerDummy);
271 #else
272  dbmanager_ptr p(new databaseManager());
273 #endif
274  return p;
275 }
276 
277 template <>
278 inline void connectOpen(dbmanager_ptr db, const connectParams& connPrams,
279  bool newConnection)
280 {
281  connectOpen(db->db(), connPrams, newConnection);
282 }
283 
284 /** @endcond */
285 
286 } // namespace client
287 } // namespace tdap
288 } // namespace protocol
289 } // namespace db
290 } // namespace bzs
291 
292 #endif // BZS_DB_PROTOCOL_TDAP_CLIENT_DATABASEMANAGER_H
void abortTrn()
Definition: databaseManager.h:100
const _TCHAR * protocol(const _TCHAR *uri)
Definition: uri.h:42
void beginSnapshot(short bias=CONSISTENT_READ)
Definition: databaseManager.h:256
void endTrn()
Definition: databaseManager.h:98
int enableTrn()
Definition: databaseManager.h:102
databaseManager()
Definition: databaseManager.h:59
void beginTrn(short bias=SINGLELOCK_READ_COMMITED+NOWAIT_WRITE)
void use(const connectParams *param=NULL)
Definition: databaseManager.h:84
databaseManager(database_ptr db)
Definition: databaseManager.h:65
void beginTrn(short bias)
Definition: databaseManager.h:229
static void throwError(const _TCHAR *caption, short statusCode)
char_td mode() const
Definition: databaseManager.h:110
boost::shared_ptr< idatabaseManager > dbmanager_ptr
Definition: trdboostapi.h:1207
uchar_td * clientID() const
Definition: databaseManager.h:116
void use(const connectParams *param=NULL)
Definition: databaseManager.h:198
void endSnapshot()
Definition: databaseManager.h:106
void beginSnapshot(short bias=CONSISTENT_READ)
disbDbManager(database_ptr &db)
Definition: databaseManager.h:167
boost::shared_ptr< table > table_ptr
Definition: fields.h:219
const _TCHAR * uri() const
Definition: databaseManager.h:108
bool isOpened() const
Definition: databaseManager.h:223
boost::shared_ptr< database > database_ptr
Definition: fields.h:218
void unUse()
Definition: databaseManager.h:217
void endSnapshot()
Definition: databaseManager.h:258
short_td stat() const
Definition: databaseManager.h:114
void unUse()
Definition: databaseManager.h:90
const _TCHAR * uri() const
Definition: databaseManager.h:219
void endTrn()
Definition: databaseManager.h:242
void close(bool withDropDefaultSchema=false)
table_ptr openTable(Database_Ptr db, const _TCHAR *name, short mode=TD_OPEN_NORMAL, bool autoCreate=true, const _TCHAR *ownerName=NULL, const _TCHAR *uri=NULL)
Definition: trdboostapi.h:894
データベースとテーブルを管理するインタフェース
Definition: trdboostapi.h:152
int enableTrn()
Definition: databaseManager.h:254
database_ptr createDatabaseObject()
Definition: trdboostapi.h:801
void connectOpen(Database_Ptr db, const connectParams &connPrams, bool newConnection)
Definition: trdboostapi.h:877
short_td stat() const
Definition: databaseManager.h:260
bool isSameUri(const connectParams *param, const Database_Ptr &db)
Definition: trdboostapi.h:781
void reset(int)
Definition: databaseManager.h:69
void abortTrn()
Definition: databaseManager.h:248
uchar_td * clientID() const
Definition: databaseManager.h:262
__int64 option()
Definition: databaseManager.h:94
分散データベースマネージャ(シングルスレッドのみ)
Definition: databaseManager.h:131
disbDbManager()
Definition: databaseManager.h:154
void setOption(__int64)
Definition: databaseManager.h:92
データベースアクセスクラス
Definition: database.h:59
void setOption(__int64)
Definition: databaseManager.h:225
database_ptr & addDb(database_ptr &db)
Definition: databaseManager.h:178
void beginSnapshot(short bias=CONSISTENT_READ)
Definition: databaseManager.h:104
__int64 option()
Definition: databaseManager.h:227
database * db() const
Definition: databaseManager.h:82
table_ptr table(const _TCHAR *name)
Definition: databaseManager.h:71
void beginTrn(short bias)
Definition: databaseManager.h:96
char_td mode() const
Definition: databaseManager.h:221
標準データベースマネージャ
Definition: databaseManager.h:38
void reset(int)
Definition: databaseManager.h:169
disbDbManager(database *db)
Definition: databaseManager.h:160
table_ptr table(const _TCHAR *name)
Definition: databaseManager.h:185
データベースへの接続文字列生成ヘルパークラス
Definition: trdboostapi.h:70
bool isOpened() const
Definition: databaseManager.h:112
database * db() const
Definition: databaseManager.h:196
databaseManager(database *db)
Definition: databaseManager.h:67

Transactd SDK 2015年09月08日(火) 19時13分35秒 doxygen