全て クラス 名前空間 関数 変数 型定義 列挙型 列挙値 ページ
trdboostapi.h
1 #ifndef BZS_DB_PROTOCOL_TDAP_CLIENT_TRDBOOSTAPI_H
2 #define BZS_DB_PROTOCOL_TDAP_CLIENT_TRDBOOSTAPI_H
3 /*=================================================================
4  Copyright (C) 2013-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 "trdboostapiInternal.h"
22 #include <boost/shared_ptr.hpp>
23 #include <boost/noncopyable.hpp>
24 #include <iterator>
25 #include <stdio.h>
26 #include <bzs/db/protocol/tdap/uri.h>
27 
28 #if defined(__GNUC__)
29 #if (!defined(__clang__) && \
30  ((__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 3)))
31 #error "Your GCC version is too old. 4.3 or later versions are required."
32 #endif
33 #endif
34 
35 namespace bzs
36 {
37 namespace db
38 {
39 namespace protocol
40 {
41 namespace tdap
42 {
43 namespace client
44 {
45 
47 {
55 };
56 
58 {
61 };
62 
64 {
68 };
69 
70 #pragma warning(disable : 4996)
71 
73 {
74  _TCHAR m_buf[MAX_PATH];
75  short m_type;
76  char_td m_mode;
77 
78 public:
79  inline connectParams(const _TCHAR* protocol, const _TCHAR* hostOrIp,
80  const _TCHAR* dbname, const _TCHAR* schemaTable
81  ,const _TCHAR* userName=NULL, const _TCHAR* passwd=NULL)
82  : m_type(TYPE_SCHEMA_BDF), m_mode(TD_OPEN_READONLY)
83  {
84  if (!protocol || !hostOrIp || !dbname) return;
85 
86  _TCHAR dbf[MAX_PATH]={0x00};
87  const _TCHAR* ext = _T(".bdf");
88  if (protocol[0] == 'b')
89  { // btrv include file extension
90  if (_tcscmp(schemaTable, _T("file")) == 0 ||
91  _tcscmp(schemaTable, _T("FILE")) == 0)
92  {
93  ext = _T(".ddf");
94  m_type = TYPE_SCHEMA_DDF;
95  }
96  if (_tcsstr(schemaTable, _T(".ddf")) || _tcsstr(schemaTable, _T(".DDF")))
97  {
98  m_type = TYPE_SCHEMA_DDF;
99  ext = _T("");
100  }
101  }
102  if (schemaTable && schemaTable[0])
103  {
104 
105  if (_tcscmp(schemaTable, TRANSACTD_SCHEMANAME)==0)
106  ext = _T("");
107  _stprintf_s(dbf, MAX_PATH, _T("dbfile=%s%s"), schemaTable, ext);
108  }
109  if (userName == NULL || (userName[0] == 0x00))
110  _stprintf_s(m_buf, MAX_PATH, _T("%s://%s/%s?%s"), protocol,
111  hostOrIp, dbname, dbf);
112  else
113  {
114  if (!passwd) passwd = _T("");
115  _stprintf_s(m_buf, MAX_PATH, _T("%s://%s@%s/%s?%s&pwd=%s"),
116  protocol, userName, hostOrIp, dbname, dbf, passwd);
117  }
118  }
119  inline explicit connectParams(const _TCHAR* uri)
120  : m_type(TYPE_SCHEMA_BDF), m_mode(TD_OPEN_READONLY)
121  {
122  _tcscpy_s(m_buf, MAX_PATH, uri);
123  size_t len = _tcslen(uri);
124  if (len > 5)
125  {
126  _TCHAR tmp[10];
127  _tcscpy_s(tmp, 10, uri + len - 4);
128 #ifdef _tcsupr_s
129  _tcsupr_s(tmp, 10);
130 #else
131  _tcsupr(tmp);
132 #endif
133  if (_tcscmp(tmp, _T(".DDF"))==0)
134  m_type = TYPE_SCHEMA_DDF;
135  }
136  }
137  inline void setMode(char_td v) { m_mode = v; }
138 
139  inline void setType(short v)
140  {
141  if (m_type != v)
142  {
143  if ((_tcslen(m_buf) > 3) && m_buf[_tcslen(m_buf) - 3] == _T('.'))
144  {
145  m_buf[_tcslen(m_buf) - 3] = 0x00;
146  if (v == TYPE_SCHEMA_BDF)
147  _tcscat_s(m_buf, MAX_PATH, _T("bdf"));
148  else
149  _tcscat_s(m_buf, MAX_PATH, _T("ddf"));
150  }
151  }
152  m_type = v;
153  }
154 
155  inline const _TCHAR* uri() const
156  {
157  return m_buf;
158  }
159 
160  inline char_td mode() const { return m_mode; };
161 
162  inline short type() const { return m_type; };
163 };
164 #pragma warning(default : 4996)
165 
166 /* databaseManager interface
167  If use some databases, implemnt a this interface and set the activeTable
168  constructor
169  Create table by name and option from suitable database.
170 
171 */
173 {
174 
175 public:
176  virtual ~idatabaseManager(){};
177  virtual void reset(int) = 0;
178  virtual table_ptr table(const _TCHAR* name) = 0;
179  virtual database* db() const = 0;
180  virtual void use(const connectParams* param = NULL) = 0;
181  virtual void unUse() = 0;
182  virtual void setOption(__int64 v) = 0;
183  virtual __int64 option() = 0;
184  virtual void beginTrn(short bias) = 0;
185  virtual void endTrn() = 0;
186  virtual void abortTrn() = 0;
187  virtual int enableTrn() = 0;
188  virtual void beginSnapshot(short bias = CONSISTENT_READ, binlogPos* bpos = NULL) = 0;
189  virtual void endSnapshot() = 0;
190  virtual const _TCHAR* uri() const = 0;
191  virtual char_td mode() const = 0;
192  virtual bool isOpened() const = 0;
193  virtual short_td stat() const = 0;
194  virtual uchar_td* clientID() const = 0;
195 };
196 
197 template <class T>
199  : public std::iterator<std::bidirectional_iterator_tag, fields, void>
200 {
201 
202  table& m_tb;
203  fields m_fds;
204  ushort_td m_lockBias;
205 
206 public:
207  inline tableIterator(table& tb, ushort_td lockBias = LOCK_BIAS_DEFAULT) : m_tb(tb), m_fds(tb),m_lockBias(lockBias)
208  {
209  readStatusCheck(tb, _T("tableIterator"));
210  }
211 
212  table& tb() const { return m_tb; };
213 
214  void setLockBias(ushort_td v) { m_lockBias = v; }
215 
216  inline fields& operator*() { return m_fds; }
217 
218  inline fields* operator->() { return &m_fds; }
219 
221  {
222  T::increment(m_tb, m_lockBias);
223  return *this;
224  }
225 
227  {
228  T::decrement(m_tb, m_lockBias);
229  return *this;
230  }
231 
232  inline bool operator==(const tableIterator& v) { return m_tb.stat() != 0; }
233 
234  inline bool operator!=(const tableIterator& v) { return m_tb.stat() == 0; }
235 
236  inline bool isEnd() { return m_tb.stat() != 0; }
237 };
238 
242 
246 
247 static const int filter_validate_value = 0;
248 static const int filter_validate_block = 1;
249 static const int filter_invalidate_value = 2;
250 
251 typedef boost::function<int(const fields&)> validationFunc;
252 
253 #define VALIDATION_FUNC(FUNC_PTR, PTR) boost::bind(FUNC_PTR, PTR, fields_type)
254 
255 template <class T>
257  : public std::iterator<std::input_iterator_tag, fields, void>
258 {
259  T& m_it;
260  validationFunc m_func;
261  inline int callFunc()
262  {
263  int v = m_func(*m_it);
264  if (v == filter_invalidate_value)
265  m_it.tb().setStat(STATUS_EOF);
266  return v;
267  }
268 
269 public:
270  filterdIterator(T& it, validationFunc func) : m_it(it), m_func(func)
271  {
272  int v = callFunc();
273  if (v == filter_validate_block)
274  operator++();
275  }
276 
277  inline fields operator*() { return m_it.operator*(); }
278 
279  inline fields* operator->() { return m_it.operator->(); }
280 
282  {
283  int v;
284  do
285  {
286  ++m_it;
287  v = callFunc();
288  } while (v == filter_validate_block);
289  return m_it;
290  }
291 
292  inline bool operator==(const filterdIterator& v)
293  {
294  return m_it.operator==(v.m_it);
295  }
296 
297  inline bool operator!=(const filterdIterator& v)
298  {
299  return m_it.operator!=(v.m_it);
300  }
301 
302  inline bool isEnd() { return m_it.isEnd(); }
303 };
304 
308 
312 
313 inline indexIterator readIndex(table_ptr tb, eIndexOpType op, ushort_td lockBias = LOCK_BIAS_DEFAULT)
314 {
315 
316  switch (op)
317  {
318  case eSeekEqual:
319  tb->seek(lockBias);
320  break;
321  case eSeekFirst:
322  tb->seekFirst(lockBias);
323  break;
324  case eSeekGreaterOrEqual:
325  tb->seekGreater(true, lockBias);
326  break;
327  case eSeekGreater:
328  tb->seekGreater(false, lockBias);
329  break;
330  default:
331  assert(0);
332  readStatusCheck(*tb, _T("readIndex"));
333  }
334  return indexIterator(*tb, lockBias);
335 }
336 
337 inline indexRvIterator readIndexRv(table_ptr tb, eIndexOpType op, ushort_td lockBias = LOCK_BIAS_DEFAULT)
338 {
339 
340  switch (op)
341  {
342  case eSeekEqual:
343  tb->seek(lockBias);
344  break;
345  case eSeekLast:
346  tb->seekLast(lockBias);
347  break;
349  tb->seekLessThan(true, lockBias);
350  break;
351  case eSeekLessThan:
352  tb->seekLessThan(false, lockBias);
353  break;
354  default:
355  assert(0);
356  readStatusCheck(*tb, _T("readIndexRv"));
357  }
358  return indexRvIterator(*tb, lockBias);
359 }
360 
361 template <class T>
362 inline indexIterator readIndex(table_ptr tb, eIndexOpType op, char_td keynum,
363  T func, ushort_td lockBias = LOCK_BIAS_DEFAULT)
364 {
365  tb->setKeyNum(keynum);
366  if (&func)
367  {
368  fields fds(*tb);
369  func(fds);
370  }
371  return readIndex(tb, op, lockBias);
372 }
373 
374 template <class T>
376  char_td keynum, T func, ushort_td lockBias = LOCK_BIAS_DEFAULT)
377 {
378  tb->setKeyNum(keynum);
379  if (&func)
380  {
381  fields fds(*tb);
382  func(fds);
383  }
384  return readIndexRv(tb, op, lockBias);
385 }
386 
387 template <class T0, class T1, class T2, class T3, class T4, class T5, class T6,
388  class T7>
389 inline indexIterator
390 readIndex_v(table_ptr tb, eIndexOpType op, const char_td keynum, const T0 kv0,
391  const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4,
392  const T5 kv5, const T6 kv6, const T7 kv7)
393 {
394  keyValueSetter<T0, T1, T2, T3, T4, T5, T6, T7>::set(
395  tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6, kv7);
396  return readIndex(tb, op);
397 }
398 
399 /** @cond INTERNAL */
400 
401 template <class T0, class T1, class T2, class T3, class T4, class T5, class T6>
403  const char_td keynum, const T0 kv0,
404  const T1 kv1, const T2 kv2, const T3 kv3,
405  const T4 kv4, const T5 kv5, const T6 kv6)
406 {
407  keyValueSetter<T0, T1, T2, T3, T4, T5, T6>::set(tb, keynum, kv0, kv1, kv2,
408  kv3, kv4, kv5, kv6);
409  return readIndex(tb, op);
410 }
411 
412 template <class T0, class T1, class T2, class T3, class T4, class T5>
414  const char_td keynum, const T0 kv0,
415  const T1 kv1, const T2 kv2, const T3 kv3,
416  const T4 kv4, const T5 kv5)
417 {
418  keyValueSetter<T0, T1, T2, T3, T4, T5>::set(tb, keynum, kv0, kv1, kv2, kv3,
419  kv4, kv5);
420  return readIndex(tb, op);
421 }
422 
423 template <class T0, class T1, class T2, class T3, class T4>
424 inline indexIterator
425 readIndex_v(table_ptr tb, eIndexOpType op, const char_td keynum, const T0 kv0,
426  const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4)
427 {
428  keyValueSetter<T0, T1, T2, T3, T4>::set(tb, keynum, kv0, kv1, kv2, kv3,
429  kv4);
430  return readIndex(tb, op);
431 }
432 
433 template <class T0, class T1, class T2, class T3>
435  const char_td keynum, const T0 kv0,
436  const T1 kv1, const T2 kv2, const T3 kv3)
437 {
438  keyValueSetter<T0, T1, T2, T3>::set(tb, keynum, kv0, kv1, kv2, kv3);
439  return readIndex(tb, op);
440 }
441 
442 template <class T0, class T1, class T2>
444  const char_td keynum, const T0 kv0,
445  const T1 kv1, const T2 kv2)
446 {
447  keyValueSetter<T0, T1, T2>::set(tb, keynum, kv0, kv1, kv2);
448  return readIndex(tb, op);
449 }
450 
451 template <class T0, class T1>
453  const char_td keynum, const T0 kv0,
454  const T1 kv1)
455 {
456  keyValueSetter<T0, T1>::set(tb, keynum, kv0, kv1);
457  return readIndex(tb, op);
458 }
459 
460 template <class T0>
462  const char_td keynum, const T0 kv0)
463 {
464  keyValueSetter<T0>::set(tb, keynum, kv0);
465  return readIndex(tb, op);
466 }
467 /** @endcond */
468 
469 template <class T0, class T1, class T2, class T3, class T4, class T5, class T6,
470  class T7>
471 inline indexRvIterator
472 readIndexRv_v(table_ptr tb, eIndexOpType op, const char_td keynum, const T0 kv0,
473  const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4,
474  const T5 kv5, const T6 kv6, const T7 kv7)
475 {
476  keyValueSetter<T0, T1, T2, T3, T4, T5, T6, T7>::set(
477  tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6, kv7);
478  return readIndexRv(tb, op);
479 }
480 
481 /** @cond INTERNAL */
482 
483 template <class T0, class T1, class T2, class T3, class T4, class T5, class T6>
485  const char_td keynum, const T0 kv0,
486  const T1 kv1, const T2 kv2, const T3 kv3,
487  const T4 kv4, const T5 kv5, const T6 kv6)
488 {
489  keyValueSetter<T0, T1, T2, T3, T4, T5, T6>::set(tb, keynum, kv0, kv1, kv2,
490  kv3, kv4, kv5, kv6);
491  return readIndexRv(tb, op);
492 }
493 
494 template <class T0, class T1, class T2, class T3, class T4, class T5>
496  const char_td keynum, const T0 kv0,
497  const T1 kv1, const T2 kv2, const T3 kv3,
498  const T4 kv4, const T5 kv5)
499 {
500  keyValueSetter<T0, T1, T2, T3, T4, T5>::set(tb, keynum, kv0, kv1, kv2, kv3,
501  kv4, kv5);
502  return readIndexRv(tb, op);
503 }
504 
505 template <class T0, class T1, class T2, class T3, class T4>
506 inline indexRvIterator
507 readIndexRv_v(table_ptr tb, eIndexOpType op, const char_td keynum, const T0 kv0,
508  const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4)
509 {
510  keyValueSetter<T0, T1, T2, T3, T4>::set(tb, keynum, kv0, kv1, kv2, kv3,
511  kv4);
512  return readIndexRv(tb, op);
513 }
514 
515 template <class T0, class T1, class T2, class T3>
517  const char_td keynum, const T0 kv0,
518  const T1 kv1, const T2 kv2, const T3 kv3)
519 {
520  keyValueSetter<T0, T1, T2, T3>::set(tb, keynum, kv0, kv1, kv2, kv3);
521  return readIndexRv(tb, op);
522 }
523 
524 template <class T0, class T1, class T2>
526  const char_td keynum, const T0 kv0,
527  const T1 kv1, const T2 kv2)
528 {
529  keyValueSetter<T0, T1, T2>::set(tb, keynum, kv0, kv1, kv2);
530  return readIndexRv(tb, op);
531 }
532 
533 template <class T0, class T1>
535  const char_td keynum, const T0 kv0,
536  const T1 kv1)
537 {
538  keyValueSetter<T0, T1>::set(tb, keynum, kv0, kv1);
539  return readIndexRv(tb, op);
540 }
541 
542 template <class T0>
544  const char_td keynum, const T0 kv0)
545 {
546  keyValueSetter<T0>::set(tb, keynum, kv0);
547  return readIndexRv(tb, op);
548 }
549 /** @endcond */
550 
551 inline stepIterator readStep(table_ptr tb, ushort_td lockBias = LOCK_BIAS_DEFAULT)
552 {
553  tb->stepFirst(lockBias);
554  return stepIterator(*tb, lockBias);
555 }
556 
557 inline stepRvIterator readStepRv(table_ptr tb, ushort_td lockBias = LOCK_BIAS_DEFAULT)
558 {
559  tb->stepLast(lockBias);
560  return stepRvIterator(*tb, lockBias);
561 }
562 
563 
564 inline pq_handle setQuery(table_ptr& tb, const queryBase& q,
565  bool serverPrepare = false)
566 {
567  pq_handle stmt = tb->setQuery(&q, serverPrepare);
568  readStatusCheck(*tb, _T("setQuery"));
569  return stmt;
570 }
571 
572 /** @cond INTERNAL */
573 inline pq_handle setQuery(table_ptr& tb, const pq_handle& q)
574 {
575  tb->setPrepare(q);
576  return q;
577 }
578 /** @endcond */
579 
580 inline pq_handle prepare(table_ptr& tb, const queryBase& q, bool serverPrepare=false)
581 {
582  pq_handle stmt = tb->prepare(&q, serverPrepare);
583  readStatusCheck(*tb, _T("prepare"));
584  return stmt;
585 }
586 
587 template <class Q, class T0, class T1, class T2, class T3, class T4, class T5, class T6,
588  class T7>
589 inline findIterator find(table_ptr tb, const char_td keynum, const Q& q,
590  const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,
591  const T4 kv4, const T5 kv5, const T6 kv6, const T7 kv7)
592 {
593  setQuery(tb, q);
594  keyValueSetter<T0, T1, T2, T3, T4, T5, T6, T7>::set(
595  tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6, kv7);
596  tb->find(table::findForword);
597  return findIterator(*tb);
598 }
599 
600 
601 /** @cond INTERNAL */
602 
603 template <class Q, class T0, class T1, class T2, class T3, class T4, class T5, class T6>
604 inline findIterator find(table_ptr tb, const char_td keynum, const Q& q,
605  const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,
606  const T4 kv4, const T5 kv5, const T6 kv6)
607 {
608  setQuery(tb, q);
609  keyValueSetter<T0, T1, T2, T3, T4, T5, T6>::set(tb, keynum, kv0, kv1, kv2,
610  kv3, kv4, kv5, kv6);
611  tb->find(table::findForword);
612  return findIterator(*tb);
613 }
614 
615 template <class Q, class T0, class T1, class T2, class T3, class T4, class T5>
616 inline findIterator find(table_ptr tb, const char_td keynum, const Q& q,
617  const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,
618  const T4 kv4, const T5 kv5)
619 {
620  setQuery(tb, q);
621  keyValueSetter<T0, T1, T2, T3, T4, T5>::set(tb, keynum, kv0, kv1, kv2, kv3,
622  kv4, kv5);
623  tb->find(table::findForword);
624  return findIterator(*tb);
625 }
626 
627 template <class Q, class T0, class T1, class T2, class T3, class T4>
628 inline findIterator find(table_ptr tb, const char_td keynum, const Q& q,
629  const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,
630  const T4 kv4)
631 {
632  setQuery(tb, q);
633  keyValueSetter<T0, T1, T2, T3, T4>::set(tb, keynum, kv0, kv1, kv2, kv3,
634  kv4);
635  tb->find(table::findForword);
636  return findIterator(*tb);
637 }
638 
639 template <class Q, class T0, class T1, class T2, class T3>
640 inline findIterator find(table_ptr tb, const char_td keynum, const Q& q,
641  const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3)
642 {
643  setQuery(tb, q);
644  keyValueSetter<T0, T1, T2, T3>::set(tb, keynum, kv0, kv1, kv2, kv3);
645  tb->find(table::findForword);
646  return findIterator(*tb);
647 }
648 
649 template <class Q, class T0, class T1, class T2>
650 inline findIterator find(table_ptr tb, const char_td keynum, const Q& q,
651  const T0 kv0, const T1 kv1, const T2 kv2)
652 {
653  setQuery(tb, q);
654  keyValueSetter<T0, T1, T2>::set(tb, keynum, kv0, kv1, kv2);
655  tb->find(table::findForword);
656  return findIterator(*tb);
657 }
658 
659 template <class Q, class T0, class T1>
660 inline findIterator find(table_ptr tb, const char_td keynum, const Q& q,
661  const T0 kv0, const T1 kv1)
662 {
663  setQuery(tb, q);
664  keyValueSetter<T0, T1>::set(tb, keynum, kv0, kv1);
665  tb->find(table::findForword);
666  return findIterator(*tb);
667 }
668 
669 template <class Q, class T0>
670 inline findIterator find(table_ptr tb, const char_td keynum, const Q& q,
671  const T0 kv0)
672 {
673  setQuery(tb, q);
674  keyValueSetter<T0>::set(tb, keynum, kv0);
675  tb->find(table::findForword);
676  return findIterator(*tb);
677 }
678 /** @endcond */
679 
680 template <class Q, class T0, class T1, class T2, class T3, class T4, class T5, class T6,
681  class T7>
682 inline findRvIterator findRv(table_ptr tb, const char_td keynum,
683  const Q& q, const T0 kv0, const T1 kv1,
684  const T2 kv2, const T3 kv3, const T4 kv4,
685  const T5 kv5, const T6 kv6, const T7 kv7)
686 {
687  setQuery(tb, q);
688  keyValueSetter<T0, T1, T2, T3, T4, T5, T6, T7>::set(
689  tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6, kv7);
690  tb->find(table::findBackForword);
691  return findRvIterator(*tb);
692 }
693 
694 /** @cond INTERNAL */
695 
696 template <class Q, class T0, class T1, class T2, class T3, class T4, class T5, class T6>
697 inline findRvIterator findRv(table_ptr tb, const char_td keynum,
698  const Q& q, const T0 kv0, const T1 kv1,
699  const T2 kv2, const T3 kv3, const T4 kv4,
700  const T5 kv5, const T6 kv6)
701 {
702  setQuery(tb, q);
703  keyValueSetter<T0, T1, T2, T3, T4, T5, T6>::set(tb, keynum, kv0, kv1, kv2,
704  kv3, kv4, kv5, kv6);
705  tb->find(table::findBackForword);
706  return findRvIterator(*tb);
707 }
708 
709 template <class Q, class T0, class T1, class T2, class T3, class T4, class T5>
710 inline findRvIterator
711 findRv(table_ptr tb, const char_td keynum, const Q& q, const T0 kv0,
712  const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4, const T5 kv5)
713 {
714  setQuery(tb, q);
715  keyValueSetter<T0, T1, T2, T3, T4, T5>::set(tb, keynum, kv0, kv1, kv2, kv3,
716  kv4, kv5);
717  tb->find(table::findBackForword);
718  return findRvIterator(*tb);
719 }
720 
721 template <class Q, class T0, class T1, class T2, class T3, class T4>
722 inline findRvIterator findRv(table_ptr tb, const char_td keynum,
723  const Q& q, const T0 kv0, const T1 kv1,
724  const T2 kv2, const T3 kv3, const T4 kv4)
725 {
726  setQuery(tb, q);
727  keyValueSetter<T0, T1, T2, T3, T4>::set(tb, keynum, kv0, kv1, kv2, kv3,
728  kv4);
729  tb->find(table::findBackForword);
730  return findRvIterator(*tb);
731 }
732 
733 template <class Q, class T0, class T1, class T2, class T3>
734 inline findRvIterator findRv(table_ptr tb, const char_td keynum,
735  const Q& q, const T0 kv0, const T1 kv1,
736  const T2 kv2, const T3 kv3)
737 {
738  setQuery(tb, q);
739  keyValueSetter<T0, T1, T2, T3>::set(tb, keynum, kv0, kv1, kv2, kv3);
740  tb->find(table::findBackForword);
741  return findRvIterator(*tb);
742 }
743 
744 template <class Q, class T0, class T1, class T2>
745 inline findRvIterator findRv(table_ptr tb, const char_td keynum,
746  const Q& q, const T0 kv0, const T1 kv1,
747  const T2 kv2)
748 {
749  setQuery(tb, q);
750  keyValueSetter<T0, T1, T2>::set(tb, keynum, kv0, kv1, kv2);
751  tb->find(table::findBackForword);
752  return findRvIterator(*tb);
753 }
754 
755 template <class Q, class T0, class T1>
756 inline findRvIterator findRv(table_ptr tb, const char_td keynum,
757  const Q& q, const T0 kv0, const T1 kv1)
758 {
759  setQuery(tb, q);
760  keyValueSetter<T0, T1>::set(tb, keynum, kv0, kv1);
761  tb->find(table::findBackForword);
762  return findRvIterator(*tb);
763 }
764 
765 template <class Q, class T0>
766 inline findRvIterator findRv(table_ptr tb, const char_td keynum,
767  const Q& q, const T0 kv0)
768 {
769  setQuery(tb, q);
770  keyValueSetter<T0>::set(tb, keynum, kv0);
771  tb->find(table::findBackForword);
772  return findRvIterator(*tb);
773 }
774 
775 /** @endcond */
776 
778  bool isCurrentValid)
779 
780 {
781  if (!it.isEnd())
782  {
783  it.tb().setQuery(&q);
784  if (!isCurrentValid)
785  it.tb().findNext(false);
786  }
787  return findIterator(it.tb());
788 }
789 
791  bool isCurrentValid)
792 {
793  if (!it.isEnd())
794  it.tb().setQuery(&q);
795  if (!isCurrentValid)
796  it.tb().findPrev(false);
797  return findRvIterator(it.tb());
798 }
799 
800 template <class Database_Ptr>
801 bool isSameUri(const connectParams* param, const Database_Ptr& db)
802 {
803  return db && db->isOpened() && (_tcsicmp(param->uri(), db->uri()) == 0) &&
804  (param->mode() == db->mode());
805 }
806 
807 inline void releaseDatabase(database* db)
808 {
809  database::destroy(db);
810 }
811 
812 inline void releaseTable(table* p)
813 {
814  if (p)
815  {
816  if (nsdatabase::testTablePtr(p))
817  p->release();
818  }
819 }
820 
822 {
824  return p;
825 }
826 
828 {
829  database_ptr p(db->createAssociate(), releaseDatabase);
830  return p;
831 }
832 
833 template <class Database_Ptr>
834 inline void disconnect(Database_Ptr db, const connectParams& connPrams)
835 {
836  db->disconnect(connPrams.uri());
837  if (db->stat())
838  nstable::throwError((std::_tstring(_T("Disconnect database ")) +
839  connPrams.uri()).c_str(),
840  db->stat());
841 }
842 
843 template <class Database_Ptr> inline void disconnect(Database_Ptr db)
844 {
845  db->disconnect();
846  if (db->stat())
847  nstable::throwError(_T("Disconnect database "), db->stat());
848 }
849 
850 template <class Database_Ptr>
851 inline void throwDbError(Database_Ptr db, const _TCHAR* caption, const _TCHAR* uri)
852 {
853  TCHAR tmp[MAX_PATH];
854  tdap::stripPasswd(uri, tmp, MAX_PATH);
855  nstable::throwError((std::_tstring(caption) + tmp).c_str(), db->stat());
856 }
857 
858 template <class Database_Ptr, class ConnectParam_type>
859 inline void connect(Database_Ptr db, const ConnectParam_type& connPrams,
860  bool newConnection)
861 {
862  db->connect(connPrams.uri(), newConnection);
863  if (db->stat())
864  throwDbError(db, _T("Connect database : "), connPrams.uri());
865 }
866 
867 template <class Database_Ptr>
868 inline void createDatabase(Database_Ptr db, const connectParams& connPrams)
869 {
870  db->create(connPrams.uri(), connPrams.type());
871  if (db->stat())
872  throwDbError(db, _T("Create database : "), connPrams.uri());
873 }
874 
875 template <class Database_Ptr>
876 inline void createDatabase(Database_Ptr db, const _TCHAR* uri,
877  short type = TYPE_SCHEMA_BDF)
878 {
879  db->create(uri, type);
880  if (db->stat())
881  throwDbError(db, _T("Create database : "), uri);
882 }
883 
884 template <class Database_Ptr, class ConnectParam_type>
885 inline void openDatabase(Database_Ptr db, const ConnectParam_type& connPrams)
886 {
887  db->open(connPrams.uri(), connPrams.type(), connPrams.mode());
888  if (db->stat())
889  throwDbError(db, _T("Open database : "), connPrams.uri());
890 }
891 
892 template <class Database_Ptr>
893 inline void openDatabase(Database_Ptr db, const _TCHAR* uri,
894  short schemaType = 0, short mode = -2,
895  const _TCHAR* dir = NULL,
896  const _TCHAR* ownername = NULL)
897 {
898  db->open(uri, schemaType, mode, dir, ownername);
899  if (db->stat())
900  throwDbError(db, _T("Open database : "), uri);
901 }
902 
903 template <class Database_Ptr>
904 inline void connectOpen(Database_Ptr db, const connectParams& connPrams,
905  bool newConnection)
906 {
907  if (newConnection)
908  connect(db, connPrams, newConnection);
909  openDatabase(db, connPrams);
910 }
911 
912 template <class Database_Ptr> inline void dropDatabase(Database_Ptr db, const _TCHAR* uri=NULL)
913 {
914  db->drop(uri);
915  if (db->stat() && (db->stat() != ERROR_NO_DATABASE))
916  throwDbError(db, _T("Drop database : "), uri ? uri : _T(""));
917 }
918 
919 template <class Database_Ptr>
920 inline table_ptr openTable(Database_Ptr db, const _TCHAR* name,
921  short mode = TD_OPEN_NORMAL,
922  bool autoCreate = true, const _TCHAR* ownerName = NULL,
923  const _TCHAR* uri = NULL)
924 {
925  table_ptr p(db->openTable(name, mode, autoCreate, ownerName, uri),
926  releaseTable);
927  if (db->stat())
928  nstable::throwError((std::_tstring(_T("Open table ")) + name).c_str(),
929  db->stat());
930  return p;
931 }
932 
933 template <class Database_Ptr>
934 inline table_ptr openTable(Database_Ptr db, short tableid,
935  short mode = TD_OPEN_NORMAL,
936  bool autoCreate = true, const _TCHAR* ownerName = NULL,
937  const _TCHAR* uri = NULL)
938 {
939  table_ptr p(db->openTable(tableid, mode, autoCreate, ownerName, uri),
940  releaseTable);
941 
942  if (db->stat())
943  {
944  _TCHAR buf[50];
945  _stprintf_s(buf, 50, _T("Open table id = %d"), tableid);
946  nstable::throwError(buf, db->stat());
947  }
948  return p;
949 }
950 
951 template <class Database_Ptr>
952 inline void dropTable(Database_Ptr db, const _TCHAR* name)
953 {
954  db->dropTable(name);
955  if (db->stat())
956  nstable::throwError((std::_tstring(_T("Drop table ")) + name).c_str(),
957  db->stat());
958 }
959 
960 template <class Database_Ptr>
961 inline void convertTable(Database_Ptr db, short tableid, copyDataFn func = NULL)
962 {
963 
964  if (db->existsTableFile(tableid, NULL))
965  {
966  db->setOnCopyData(func);
967  db->convertTable(tableid, false, NULL);
968  db->setOnCopyData(NULL);
969  if (db->stat())
970  {
971  assert(db->dbDef());
972  db->dbDef()->popBackup(tableid);
973  nstable::throwError(std::_tstring(_T("Convert table ")).c_str(),
974  db->stat());
975  }
976  }
977 }
978 
979 template <class Database_Ptr>
980 inline void convertTable(Database_Ptr db, const _TCHAR* name,
981  copyDataFn func = NULL)
982 {
983  assert(db->dbDef());
984  short tablenum = db->dbDef()->tableNumByName(name);
985  convertTable(db, tablenum, func);
986 }
987 
988 template <class Database_Ptr>
989 void execSql(Database_Ptr db, const char* sql)
990 {
991  db->execSql(sql);
992  #ifdef _UNICODE
993  wchar_t buf[1024];
994  MultiByteToWideChar(CP_UTF8, 0, sql, -1, buf, 1024);
995  validateStatus(db, buf);
996  #else
997  validateStatus(db, sql);
998  #endif
999 }
1000 
1001 inline void insertTable(dbdef* def, short id, const _TCHAR* name,
1002  unsigned short charsetIndex)
1003 {
1004  tabledef td;
1005  td.setTableName(name);
1006  td.setFileName(name);
1007  td.id = id;
1008  td.charsetIndex = (uchar_td)charsetIndex;
1009  def->insertTable(&td);
1010  if (def->stat() != 0)
1012  (std::_tstring(_T("Insert tabledef ")) + name).c_str(),
1013  def->stat());
1014 }
1015 
1016 inline void deleteTable(dbdef* def, short id)
1017 {
1018  def->deleteTable(id);
1019  if (def->stat() != 0)
1020  nstable::throwError(_T("Delete tabledef "), def->stat());
1021 
1022 }
1023 
1024 
1025 inline void renumberTable(dbdef* def, short id, short newid)
1026 {
1027  def->renumberTable(id, newid);
1028  if (def->stat() != 0)
1029  nstable::throwError(_T("Renumber table id "), def->stat());
1030 
1031 }
1032 
1033 inline fielddef* insertField(dbdef* def, short tableid, short fieldNum,
1034  const _TCHAR* name, uchar_td type, ushort_td len)
1035 {
1036  fielddef* fd = def->insertField(tableid, fieldNum);
1037  if (def->stat() != 0)
1039  (std::_tstring(_T("Insert fielddef ")) + name).c_str(),
1040  def->stat());
1041 
1042  fd->setName(name);
1043  fd->type = type;
1044  fd->len = len;
1045  return fd;
1046 }
1047 
1048 inline void deleteField(dbdef* def, short tableid, short fieldNum)
1049 {
1050  def->deleteField(tableid, fieldNum);
1051  if (def->stat() != 0)
1052  nstable::throwError(_T("Delete fielddef "), def->stat());
1053 }
1054 
1055 inline keydef* insertKey(dbdef* def, short tableid, short insertIndex)
1056 {
1057  keydef* kd = def->insertKey(tableid, insertIndex);
1058  if (def->stat() != 0)
1059  nstable::throwError(std::_tstring(_T("Insert keydef ")).c_str(),
1060  def->stat());
1061  return kd;
1062 }
1063 
1064 inline void deleteKey(dbdef* def, short tableid, short keynum)
1065 {
1066  def->deleteKey(tableid, keynum);
1067  if (def->stat() != 0)
1068  nstable::throwError(_T("Delete keydef "), def->stat());
1069 }
1070 
1071 inline void validateTableDef(dbdef* def, short tableid)
1072 {
1073  def->validateTableDef(tableid);
1074  if (def->stat() != 0)
1075  {
1076  std::_tstring s;
1077  if (def->tableDefs(tableid))
1078  s = def->tableDefs(tableid)->tableName();
1079  nstable::throwError((std::_tstring(_T("Validate tabledef ")) + s).c_str(),
1080  def->stat());
1081  }
1082 }
1083 
1084 inline void updateTableDef(dbdef* def, short tableid)
1085 {
1086  def->updateTableDef(tableid);
1087  if (def->stat() != 0)
1088  {
1089  std::_tstring s;
1090  if (def->tableDefs(tableid))
1091  s = def->tableDefs(tableid)->tableName();
1092  nstable::throwError((std::_tstring(_T("Update tabledef ")) + s).c_str(),
1093  def->stat());
1094  }
1095 }
1096 
1097 inline void synchronizeSeverSchema(dbdef* def, short tableid)
1098 {
1099  def->synchronizeSeverSchema(tableid);
1100  if (def->stat() != 0)
1101  {
1102  std::_tstring s;
1103  if (def->tableDefs(tableid))
1104  s = def->tableDefs(tableid)->tableName();
1105  nstable::throwError((std::_tstring(_T("synchronize Sever Schema ")) + s).c_str(),
1106  def->stat());
1107  }
1108 }
1109 
1110 
1111 /** @cond INTERNAL */
1112 
1113 template <class T> inline table* getTable(T& it)
1114 {
1115  return &(it.tb());
1116 }
1117 
1118 template <> inline table* getTable(table_ptr& tb)
1119 {
1120  return tb.get();
1121 }
1122 
1123 template <> inline table* getTable(table*& tb)
1124 {
1125  return tb;
1126 }
1127 
1128 /** @endcond */
1129 
1130 template <class T> inline void insertRecord(T& some, bool ncc = true)
1131 {
1132  table* tb = getTable(some);
1133  tb->insert(ncc);
1134  if (tb->stat() != 0)
1135  nstable::throwError(std::_tstring(_T("Insert record")).c_str(), tb);
1136 }
1137 
1138 inline void updateRecord(fields& fd, const char_td keynum)
1139 {
1140  fd.tb().setKeyNum(keynum);
1142  if (fd.tb().stat() != 0)
1143  nstable::throwError(std::_tstring(_T("Update record")).c_str(),
1144  &(fd.tb()));
1145 }
1146 
1147 template <class T> inline void updateRecord(T& some, bool ncc = true)
1148 {
1149  table* tb = getTable(some);
1150  tb->update((nstable::eUpdateType)ncc);
1151  if (tb->stat() != 0)
1152  nstable::throwError(std::_tstring(_T("Update record")).c_str(), tb);
1153 }
1154 
1155 template <class T> inline void deleteRecord(T& some)
1156 {
1157  table* tb = getTable(some);
1158  tb->del(false /*inKey*/);
1159  if (tb->stat() != 0)
1160  nstable::throwError(std::_tstring(_T("Delete record")).c_str(), tb);
1161 }
1162 
1163 template <class T> inline void deleteRecord(T& some, const char_td keynum)
1164 {
1165  table* tb = getTable(some);
1166 
1167  tb->setKeyNum(keynum);
1168  tb->del(true /*inKey*/);
1169  if (tb->stat() != 0)
1170  nstable::throwError(std::_tstring(_T("Delete record")).c_str(), tb);
1171 }
1172 
1173 template <class T0, class T1, class T2, class T3, class T4, class T5, class T6,
1174  class T7>
1175 inline void deleteRecord(table_ptr tb, const char_td keynum, const T0 kv0,
1176  const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4,
1177  const T5 kv5, const T6 kv6, const T7 kv7)
1178 {
1179  keyValueSetter<T0, T1, T2, T3, T4, T5, T6, T7>::set(
1180  tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6, kv7);
1181  fields fd(tb);
1182  deleteRecord(fd, keynum);
1183 }
1184 /** @cond INTERNAL */
1185 
1186 template <class T0, class T1, class T2, class T3, class T4, class T5, class T6>
1187 inline void deleteRecord(table_ptr tb, const char_td keynum, const T0 kv0,
1188  const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4,
1189  const T5 kv5, const T6 kv6)
1190 {
1191  keyValueSetter<T0, T1, T2, T3, T4, T5, T6>::set(tb, keynum, kv0, kv1, kv2,
1192  kv3, kv4, kv5, kv6);
1193  fields fd(tb);
1194  deleteRecord(fd, keynum);
1195 }
1196 
1197 template <class T0, class T1, class T2, class T3, class T4, class T5>
1198 inline void deleteRecord(table_ptr tb, const char_td keynum, const T0 kv0,
1199  const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4,
1200  const T5 kv5)
1201 {
1202  keyValueSetter<T0, T1, T2, T3, T4, T5>::set(tb, keynum, kv0, kv1, kv2, kv3,
1203  kv4, kv5);
1204  fields fd(tb);
1205  deleteRecord(fd, keynum);
1206 }
1207 
1208 template <class T0, class T1, class T2, class T3, class T4>
1209 inline void deleteRecord(table_ptr tb, const char_td keynum, const T0 kv0,
1210  const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4)
1211 {
1212  keyValueSetter<T0, T1, T2, T3, T4>::set(tb, keynum, kv0, kv1, kv2, kv3,
1213  kv4);
1214  fields fd(tb);
1215  deleteRecord(fd, keynum);
1216 }
1217 
1218 template <class T0, class T1, class T2, class T3>
1219 inline void deleteRecord(table_ptr tb, const char_td keynum, const T0 kv0,
1220  const T1 kv1, const T2 kv2, const T3 kv3)
1221 {
1222  keyValueSetter<T0, T1, T2, T3>::set(tb, keynum, kv0, kv1, kv2, kv3);
1223  fields fd(tb);
1224  deleteRecord(fd, keynum);
1225 }
1226 
1227 template <class T0, class T1, class T2>
1228 inline void deleteRecord(table_ptr tb, const char_td keynum, const T0 kv0,
1229  const T1 kv1, const T2 kv2)
1230 {
1231  keyValueSetter<T0, T1, T2>::set(tb, keynum, kv0, kv1, kv2);
1232  fields fd(tb);
1233  deleteRecord(fd, keynum);
1234 }
1235 
1236 template <class T0, class T1>
1237 inline void deleteRecord(table_ptr tb, const char_td keynum, const T0 kv0,
1238  const T1 kv1)
1239 {
1240  keyValueSetter<T0, T1>::set(tb, keynum, kv0, kv1);
1241  fields fd(tb);
1242  deleteRecord(fd, keynum);
1243 }
1244 
1245 template <class T0>
1246 inline void deleteRecord(table_ptr tb, const char_td keynum, const T0 kv0)
1247 {
1248  keyValueSetter<T0>::set(tb, keynum, kv0);
1249  fields fd(tb);
1250  deleteRecord(fd, keynum);
1251 }
1252 /** @endcond */
1253 
1254 template <class T, class F> void for_each(T iterator, F func)
1255 {
1256  std::for_each(iterator, iterator, func);
1257 }
1258 
1259 /** Shared pointer of idatabaseManager. */
1260 typedef boost::shared_ptr<idatabaseManager> dbmanager_ptr;
1261 
1262 template <class T> inline T createDatabaseForConnectionPool(T& p);
1263 
1264 /** @cond INTERNAL */
1266 {
1267  return createDatabaseObject();
1268 }
1269 /** @endcond */
1270 
1271 /* Exception safe trnasction
1272  It can use for database and idatabaseManager.
1273 */
1274 template <class DB> class transaction
1275 {
1276  DB m_db;
1277  short m_bias;
1278 
1279 public:
1280  inline transaction(DB db, short bias = SINGLELOCK_READ_COMMITED +
1281  NOWAIT_WRITE)
1282  : m_db(db), m_bias(bias){};
1283  inline ~transaction()
1284  {
1285  if (m_db->enableTrn())
1286  m_db->abortTrn();
1287  };
1288  inline void begin() { m_db->beginTrn(m_bias); }
1289  inline void end() { m_db->endTrn(); }
1290  inline void abort() { m_db->abortTrn(); }
1291 };
1292 
1293 /** transaction for database */
1295 
1296 /** transaction for idatabaseManager */
1298 
1299 template <class DB> class snapshot
1300 {
1301  DB m_db;
1302  bool m_started;
1303 
1304 public:
1305  snapshot(DB db, short bias = CONSISTENT_READ, binlogPos* bpos=NULL) : m_db(db)
1306  {
1307  m_db->beginSnapshot(bias, bpos);
1308  m_started = true;
1309  }
1310 
1311  void end()
1312  {
1313  if (m_started)
1314  m_db->endSnapshot();
1315  m_started = false;
1316  }
1317 
1318  ~snapshot() { end(); }
1319 };
1320 
1321 /** snapshot for database */
1323 
1324 /** snapshot for idatabaseManager */
1326 
1328 {
1329  table_ptr m_tb;
1330 
1331 public:
1332  autoBulkinsert(table_ptr tb, int bufsize = BULKBUFSIZE) : m_tb(tb)
1333  {
1334  m_tb->beginBulkInsert(bufsize);
1335  }
1336 
1337  /* For activeObject */
1338  template <class T>
1339  autoBulkinsert(T& tba, int bufsize = BULKBUFSIZE)
1340  : m_tb(tba.table())
1341  {
1342  m_tb->beginBulkInsert(bufsize);
1343  }
1344 
1345  ~autoBulkinsert() { m_tb->commitBulkInsert(); }
1346 };
1347 
1348 } // namespace client
1349 } // namespace tdap
1350 } // namespace protocol
1351 } // namespace db
1352 } // namespace bzs
1353 
1354 #endif // BZS_DB_PROTOCOL_TDAP_CLIENT_TRDBOOSTAPI_H
~snapshot()
Definition: trdboostapi.h:1318
void renumberTable(short oldIndex, short newIndex)
autoBulkinsert(table_ptr tb, int bufsize=BULKBUFSIZE)
Definition: trdboostapi.h:1332
keydef * insertKey(dbdef *def, short tableid, short insertIndex)
Definition: trdboostapi.h:1055
ushort_td len
Definition: tdapSchema.h:340
virtual void use(const connectParams *param=NULL)=0
tableIterator & operator++()
Definition: trdboostapi.h:220
snapshot(DB db, short bias=CONSISTENT_READ, binlogPos *bpos=NULL)
Definition: trdboostapi.h:1305
バルクインサート自動開始終了クラス
Definition: trdboostapi.h:1327
void openDatabase(Database_Ptr db, const ConnectParam_type &connPrams)
Definition: trdboostapi.h:885
eStepOpType
ステップオペレーションタイプ
Definition: trdboostapi.h:57
void del(bool in_key=false)
Definition: nsTable.h:179
pq_handle setQuery(const queryBase *query, bool serverPrepare=false)
void for_each(T iterator, F func)
Definition: trdboostapi.h:1254
~autoBulkinsert()
Definition: trdboostapi.h:1345
void execSql(Database_Ptr db, const char *sql)
Definition: trdboostapi.h:989
テーブルイテレータクラステンプレート
Definition: trdboostapi.h:198
autoBulkinsert(T &tba, int bufsize=BULKBUFSIZE)
Definition: trdboostapi.h:1339
transaction(DB db, short bias=SINGLELOCK_READ_COMMITED+NOWAIT_WRITE)
Definition: trdboostapi.h:1280
void deleteKey(short tableIndex, short deleteIndex)
void setMode(char_td v)
Definition: trdboostapi.h:137
void deleteRecord(T &some)
Definition: trdboostapi.h:1155
pq_handle prepare(table_ptr &tb, const queryBase &q, bool serverPrepare=false)
Definition: trdboostapi.h:580
トランザクション自動ロールバックオブジェクト
Definition: trdboostapi.h:1274
void begin()
Definition: trdboostapi.h:1288
fields operator*()
Definition: trdboostapi.h:277
pq_handle setQuery(table_ptr &tb, const queryBase &q, bool serverPrepare=false)
Definition: trdboostapi.h:564
virtual void beginSnapshot(short bias=CONSISTENT_READ, binlogPos *bpos=NULL)=0
void setTableName(const char *s)
static void throwError(const _TCHAR *caption, short statusCode)
bool operator!=(const tableIterator &v)
Definition: trdboostapi.h:234
filterdIterator(T &it, validationFunc func)
Definition: trdboostapi.h:270
virtual ~idatabaseManager()
Definition: trdboostapi.h:176
void insertTable(dbdef *def, short id, const _TCHAR *name, unsigned short charsetIndex)
Definition: trdboostapi.h:1001
void setType(short v)
Definition: trdboostapi.h:139
クエリー(フィルター)作成の補助をするためのベースクラス
Definition: table.h:354
boost::shared_ptr< idatabaseManager > dbmanager_ptr
Definition: trdboostapi.h:1260
tableIterator< indexNavi > indexIterator
Definition: trdboostapi.h:239
ushort_td id
Definition: tdapSchema.h:1200
void updateTableDef(dbdef *def, short tableid)
Definition: trdboostapi.h:1084
fielddef * insertField(dbdef *def, short tableid, short fieldNum, const _TCHAR *name, uchar_td type, ushort_td len)
Definition: trdboostapi.h:1033
スナップショット自動開始終了クラス
Definition: trdboostapi.h:1299
indexRvIterator readIndexRv(table_ptr tb, eIndexOpType op, ushort_td lockBias=LOCK_BIAS_DEFAULT)
Definition: trdboostapi.h:337
void findPrev(bool notIncCurrent=true)
database_ptr createAssociateObject(database_ptr db)
Definition: trdboostapi.h:827
フィールド定義構造体
Definition: tdapSchema.h:419
stepRvIterator readStepRv(table_ptr tb, ushort_td lockBias=LOCK_BIAS_DEFAULT)
Definition: trdboostapi.h:557
virtual const _TCHAR * uri() const =0
boost::shared_ptr< table > table_ptr
Definition: fields.h:251
フィールドコレクションクラス
Definition: fields.h:256
void throwDbError(Database_Ptr db, const _TCHAR *caption, const _TCHAR *uri)
Definition: trdboostapi.h:851
void setKeyNum(char_td v)
Definition: nsTable.h:171
tableIterator< indexRvNavi > indexRvIterator
Definition: trdboostapi.h:243
void abort()
Definition: trdboostapi.h:1290
findIterator find(table_ptr tb, const char_td keynum, const Q &q, const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4, const T5 kv5, const T6 kv6, const T7 kv7)
Definition: trdboostapi.h:589
~transaction()
Definition: trdboostapi.h:1283
findRvIterator findRv(table_ptr tb, const char_td keynum, const Q &q, const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4, const T5 kv5, const T6 kv6, const T7 kv7)
Definition: trdboostapi.h:682
filterdIterator< findIterator > filterdFindIterator
Definition: trdboostapi.h:307
void insertRecord(T &some, bool ncc=true)
Definition: trdboostapi.h:1130
Definition: trdboostapi.h:50
short_td stat() const
Definition: dbDef.h:98
void setFileName(const char *s)
keydef * insertKey(short tableIndex, short insertIndex)
boost::function< int(const fields &)> validationFunc
Definition: trdboostapi.h:251
transaction< dbmanager_ptr > dbmTransaction
Definition: trdboostapi.h:1297
snapshot< database_ptr > dbSnapshot
Definition: trdboostapi.h:1322
void deleteField(short tableIndex, short deleteIndex)
boost::shared_ptr< database > database_ptr
Definition: fields.h:250
eIndexOpType
インデックスオペレーションタイプ
Definition: trdboostapi.h:46
void(__STDCALL * copyDataFn)(database *db, table *tb, int recordCount, int count, bool &cancel)
Definition: database.h:55
tableIterator< indexRvFindNavi > findRvIterator
Definition: trdboostapi.h:244
filterdIterator< indexRvIterator > filterdIndexRvIterator
Definition: trdboostapi.h:309
テーブルスキーマ管理クラス (nocopyable noncreatable)
Definition: dbDef.h:46
テーブルアクセスクラス (nocopyable)
Definition: table.h:91
T & operator++()
Definition: trdboostapi.h:281
bool operator==(const tableIterator &v)
Definition: trdboostapi.h:232
bool operator==(const filterdIterator &v)
Definition: trdboostapi.h:292
void createDatabase(Database_Ptr db, const connectParams &connPrams)
Definition: trdboostapi.h:868
void setLockBias(ushort_td v)
Definition: trdboostapi.h:214
void connect(Database_Ptr db, const ConnectParam_type &connPrams, bool newConnection)
Definition: trdboostapi.h:859
short_td stat() const
Definition: nsTable.h:168
indexIterator readIndex_v(table_ptr tb, eIndexOpType op, const char_td keynum, const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4, const T5 kv5, const T6 kv6, const T7 kv7)
Definition: trdboostapi.h:390
void deleteField(dbdef *def, short tableid, short fieldNum)
Definition: trdboostapi.h:1048
eFindCurrntType
Definition: trdboostapi.h:63
void releaseDatabase(database *db)
Definition: trdboostapi.h:807
findIterator getFindIterator(indexIterator it, const queryBase &q, bool isCurrentValid)
Definition: trdboostapi.h:777
fields * operator->()
Definition: trdboostapi.h:218
uchar_td type
Definition: tdapSchema.h:339
connectParams(const _TCHAR *uri)
Definition: trdboostapi.h:119
filterdIterator< stepIterator > filterdStepIterator
Definition: trdboostapi.h:306
snapshot< idatabaseManager * > dbmSnapshot
Definition: trdboostapi.h:1325
キー定義構造体
Definition: tdapSchema.h:178
void dropTable(Database_Ptr db, const _TCHAR *name)
Definition: trdboostapi.h:952
stepIterator readStep(table_ptr tb, ushort_td lockBias=LOCK_BIAS_DEFAULT)
Definition: trdboostapi.h:551
void deleteKey(dbdef *def, short tableid, short keynum)
Definition: trdboostapi.h:1064
fields & operator*()
Definition: trdboostapi.h:216
tableIterator< stepRvNavi > stepRvIterator
Definition: trdboostapi.h:245
tableIterator< indexFindNavi > findIterator
Definition: trdboostapi.h:240
バイナリーログの情報
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
void updateRecord(fields &fd, const char_td keynum)
Definition: trdboostapi.h:1138
database_ptr createDatabaseObject()
Definition: trdboostapi.h:821
connectParams(const _TCHAR *protocol, const _TCHAR *hostOrIp, const _TCHAR *dbname, const _TCHAR *schemaTable, const _TCHAR *userName=NULL, const _TCHAR *passwd=NULL)
Definition: trdboostapi.h:79
void connectOpen(Database_Ptr db, const connectParams &connPrams, bool newConnection)
Definition: trdboostapi.h:904
const _TCHAR * uri() const
Definition: trdboostapi.h:155
virtual table_ptr table(const _TCHAR *name)=0
fields * operator->()
Definition: trdboostapi.h:279
tableIterator(table &tb, ushort_td lockBias=LOCK_BIAS_DEFAULT)
Definition: trdboostapi.h:207
bool isSameUri(const connectParams *param, const Database_Ptr &db)
Definition: trdboostapi.h:801
void disconnect(Database_Ptr db, const connectParams &connPrams)
Definition: trdboostapi.h:834
bool isEnd()
Definition: trdboostapi.h:236
void insertTable(tabledef *tableDef)
transaction< database_ptr > dbTransaction
Definition: trdboostapi.h:1294
short type() const
Definition: trdboostapi.h:162
bool operator!=(const filterdIterator &v)
Definition: trdboostapi.h:297
tableIterator & operator--()
Definition: trdboostapi.h:226
void end()
Definition: trdboostapi.h:1311
filterdIterator< findRvIterator > filterdFindRvIterator
Definition: trdboostapi.h:311
tableIterator< stepNavi > stepIterator
Definition: trdboostapi.h:241
void findNext(bool notIncCurrent=true)
void dropDatabase(Database_Ptr db, const _TCHAR *uri=NULL)
Definition: trdboostapi.h:912
filterdIterator< stepRvIterator > filterdStepRvIterator
Definition: trdboostapi.h:310
indexRvIterator readIndexRv_v(table_ptr tb, eIndexOpType op, const char_td keynum, const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4, const T5 kv5, const T6 kv6, const T7 kv7)
Definition: trdboostapi.h:472
filterdIterator< indexIterator > filterdIndexIterator
Definition: trdboostapi.h:305
ushort_td insert(bool ncc=false)
Definition: nsTable.h:180
void renumberTable(dbdef *def, short id, short newid)
Definition: trdboostapi.h:1025
void updateTableDef(short tableIndex, bool forPsqlDdf=true)
データベースアクセスクラス
Definition: database.h:59
void releaseTable(table *p)
Definition: trdboostapi.h:812
const char * tableName() const
void deleteTable(dbdef *def, short id)
Definition: trdboostapi.h:1016
short validateTableDef(short tableIndex)
Definition: trdboostapi.h:60
void convertTable(Database_Ptr db, short tableid, copyDataFn func=NULL)
Definition: trdboostapi.h:961
eUpdateType
更新オペレーションの対象とカレント移動のタイプ
Definition: nsTable.h:51
void update(eUpdateType type=changeCurrentCc)
Definition: nsTable.h:178
const _TCHAR * c_str(const btrDate &d)
Definition: btrDate.h:232
void synchronizeSeverSchema(dbdef *def, short tableid)
Definition: trdboostapi.h:1097
void deleteTable(short tableIndex)
char_td mode() const
Definition: trdboostapi.h:160
void synchronizeSeverSchema(short tableIndex)
void validateTableDef(dbdef *def, short tableid)
Definition: trdboostapi.h:1071
uchar_td charsetIndex
Definition: tdapSchema.h:1227
テーブル定義構造体
Definition: tdapSchema.h:1051
フィルタリングイテレータアダプターテンプレート
Definition: trdboostapi.h:256
table & tb() const
Definition: trdboostapi.h:212
table & tb() const
Definition: fields.h:288
データベースへの接続文字列生成ヘルパークラス
Definition: trdboostapi.h:72
fielddef * insertField(short tableIndex, short insertIndex)
void end()
Definition: trdboostapi.h:1289
indexIterator readIndex(table_ptr tb, eIndexOpType op, ushort_td lockBias=LOCK_BIAS_DEFAULT)
Definition: trdboostapi.h:313
bool isEnd()
Definition: trdboostapi.h:302

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