全て クラス 名前空間 関数 変数 型定義 列挙型 列挙値 ページ
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 2016 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, TD_OPEN_NORMAL);
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, binlogPos* bpos=NULL)
105  {
106  m_db->beginSnapshot(bias, bpos);
107  }
108 
109  inline void endSnapshot() { m_db->endSnapshot(); }
110 
111  inline const _TCHAR* uri() const { return m_db->uri(); }
112 
113  inline char_td mode() const { return m_db->mode(); }
114 
115  inline bool isOpened() const { return m_db->isOpened(); }
116 
117  inline short_td stat() const { return m_db->stat(); }
118 
119  inline uchar_td* clientID() const { return m_db->clientID(); }
120 };
121 
122 /** @cond INTERNAL */
123 /* multi databases and a single thread inplemantation idatabaseManager
124 */
125 inline void releaseDatabaseDummy(database* p)
126 {
127 }
128 inline void releaseDbManagerDummy(idatabaseManager* p)
129 {
130 }
131 /** @endcond */
132 
133 /** Single thread distribution database manager */
134 class disbDbManager : public idatabaseManager, private boost::noncopyable
135 {
136  std::vector<database_ptr> m_dbs;
137  database* m_db;
138 
139  std::vector<table_ptr> m_tables;
140  int findTable(const _TCHAR* name)
141  {
142  for (int i = 0; i < (int)m_tables.size(); ++i)
143  if (_tcscmp(m_tables[i]->tableDef()->tableName(), name) == 0)
144  return i;
145  return -1;
146  }
147 
148  int findDbIndex(const connectParams* param) const
149  {
150  for (int i = 0; i < (int)m_dbs.size(); ++i)
151  if (isSameUri(param, m_dbs[i]))
152  return i;
153  return -1;
154  }
155 
156 public:
158  {
160  addDb(p);
161  }
162 
164  {
165  //No delete , because managing life cycle is db owner.
166  database_ptr d(db, releaseDatabaseDummy);
167  addDb(d);
168  }
169 
171 
172  void reset(int)
173  {
174  m_tables.clear();
175  m_dbs.clear();
177  addDb(p);
178  }
179 
180  // change currnt
182  {
183  m_dbs.push_back(db);
184  m_db = db.get();
185  return db;
186  }
187 
188  table_ptr table(const _TCHAR* name)
189  {
190  int index = findTable(name);
191  if (index != -1)
192  return m_tables[index];
193  table_ptr t = openTable(m_db, name, TD_OPEN_NORMAL);
194  if (t)
195  m_tables.push_back(t);
196  return t;
197  }
198 
199  database* db() const { return m_db; }
200 
201  inline void use(const connectParams* param = NULL)
202  {
203  if (param)
204  {
205  int index = findDbIndex(param);
206  if (index == -1)
207  {
209  addDb(p);
210  m_db = p.get();
211  connectOpen(m_db, *param, false);
212  }
213  else
214  m_db = m_dbs[index].get();
215  }
216  else
217  m_db = m_dbs[0].get();
218  }
219 
220  inline void unUse(){};
221 
222  inline const _TCHAR* uri() const { return m_db->uri(); }
223 
224  inline char_td mode() const { return m_db->mode(); }
225 
226  inline bool isOpened() const { return m_db->isOpened(); }
227 
228  inline void setOption(__int64){};
229 
230  inline __int64 option() { return 0; };
231 
232  inline void beginTrn(short bias)
233  {
234  for (size_t i = 0; i < m_dbs.size(); ++i)
235  {
236  m_dbs[i]->beginTrn(bias);
237  if (m_dbs[i]->stat())
238  {
239  abortTrn();
240  nstable::throwError(m_dbs[i]->uri(), m_dbs[i]->stat());
241  }
242  }
243  }
244 
245  inline void endTrn()
246  {
247  for (size_t i = 0; i < m_dbs.size(); ++i)
248  m_dbs[i]->endTrn();
249  }
250 
251  inline void abortTrn()
252  {
253  for (size_t i = 0; i < m_dbs.size(); ++i)
254  m_dbs[i]->abortTrn();
255  }
256 
257  inline int enableTrn() { return m_db->enableTrn(); }
258 
259  inline void beginSnapshot(short bias = CONSISTENT_READ, binlogPos* bpos=NULL)
260  {
261  m_db->beginSnapshot(bias, bpos);
262  }
263 
264  inline void endSnapshot() { m_db->endSnapshot(); }
265 
266  inline short_td stat() const { return m_db->stat(); }
267 
268  inline uchar_td* clientID() const { return m_db->clientID(); }
269 };
270 /** @cond INTERNAL */
271 
272 template <>
274 {
275 #ifdef SWIGRUBY
276  dbmanager_ptr p(new databaseManager(), releaseDbManagerDummy);
277 #else
278  dbmanager_ptr p(new databaseManager());
279 #endif
280  return p;
281 }
282 
283 template <>
284 inline void connectOpen(dbmanager_ptr db, const connectParams& connPrams,
285  bool newConnection)
286 {
287  connectOpen(db->db(), connPrams, newConnection);
288 }
289 
290 /** @endcond */
291 
292 } // namespace client
293 } // namespace tdap
294 } // namespace protocol
295 } // namespace db
296 } // namespace bzs
297 
298 #endif // BZS_DB_PROTOCOL_TDAP_CLIENT_DATABASEMANAGER_H
void abortTrn()
Definition: databaseManager.h:100
void endTrn()
Definition: databaseManager.h:98
int enableTrn()
Definition: databaseManager.h:102
databaseManager()
Definition: databaseManager.h:59
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:232
static void throwError(const _TCHAR *caption, short statusCode)
char_td mode() const
Definition: databaseManager.h:113
boost::shared_ptr< idatabaseManager > dbmanager_ptr
Definition: trdboostapi.h:1260
uchar_td * clientID() const
Definition: databaseManager.h:119
void use(const connectParams *param=NULL)
Definition: databaseManager.h:201
void endSnapshot()
Definition: databaseManager.h:109
disbDbManager(database_ptr &db)
Definition: databaseManager.h:170
void beginTrn(short bias=SINGLELOCK_NOGAP+NOWAIT_WRITE)
boost::shared_ptr< table > table_ptr
Definition: fields.h:251
void beginSnapshot(short bias=CONSISTENT_READ, binlogPos *bpos=NULL)
Definition: databaseManager.h:259
const _TCHAR * uri() const
Definition: databaseManager.h:111
bool isOpened() const
Definition: databaseManager.h:226
boost::shared_ptr< database > database_ptr
Definition: fields.h:250
void unUse()
Definition: databaseManager.h:220
void endSnapshot()
Definition: databaseManager.h:264
short_td stat() const
Definition: databaseManager.h:117
void unUse()
Definition: databaseManager.h:90
const _TCHAR * uri() const
Definition: databaseManager.h:222
void endTrn()
Definition: databaseManager.h:245
void beginSnapshot(short bias=CONSISTENT_READ, binlogPos *bpos=NULL)
void close(bool withDropDefaultSchema=false)
バイナリーログの情報
Definition: nsDatabase.h:62
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:920
データベースとテーブルを管理するインタフェース
Definition: trdboostapi.h:172
int enableTrn()
Definition: databaseManager.h:257
database_ptr createDatabaseObject()
Definition: trdboostapi.h:821
void connectOpen(Database_Ptr db, const connectParams &connPrams, bool newConnection)
Definition: trdboostapi.h:904
short_td stat() const
Definition: databaseManager.h:266
bool isSameUri(const connectParams *param, const Database_Ptr &db)
Definition: trdboostapi.h:801
void reset(int)
Definition: databaseManager.h:69
void abortTrn()
Definition: databaseManager.h:251
uchar_td * clientID() const
Definition: databaseManager.h:268
__int64 option()
Definition: databaseManager.h:94
分散データベースマネージャ(シングルスレッドのみ)
Definition: databaseManager.h:134
disbDbManager()
Definition: databaseManager.h:157
void setOption(__int64)
Definition: databaseManager.h:92
データベースアクセスクラス
Definition: database.h:59
void setOption(__int64)
Definition: databaseManager.h:228
database_ptr & addDb(database_ptr &db)
Definition: databaseManager.h:181
__int64 option()
Definition: databaseManager.h:230
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:224
標準データベースマネージャ
Definition: databaseManager.h:38
void reset(int)
Definition: databaseManager.h:172
disbDbManager(database *db)
Definition: databaseManager.h:163
void beginSnapshot(short bias=CONSISTENT_READ, binlogPos *bpos=NULL)
Definition: databaseManager.h:104
table_ptr table(const _TCHAR *name)
Definition: databaseManager.h:188
データベースへの接続文字列生成ヘルパークラス
Definition: trdboostapi.h:72
bool isOpened() const
Definition: databaseManager.h:115
database * db() const
Definition: databaseManager.h:199
databaseManager(database *db)
Definition: databaseManager.h:67

Transactd SDK 2018年07月31日(火) 19時40分20秒 doxygen