transactd 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. checksums.yaml +7 -0
  2. data/BUILD_UNIX-JA +174 -0
  3. data/BUILD_WIN-JA +256 -0
  4. data/CMakeLists.txt +96 -0
  5. data/COPYING +339 -0
  6. data/README +406 -0
  7. data/README-JA +424 -0
  8. data/bin/common/tdclc_32_1_0.dll +0 -0
  9. data/bin/common/tdclc_64_1_0.dll +0 -0
  10. data/build/common/check_for_link_iconv.cmake +73 -0
  11. data/build/common/copyifgreater.cmd +30 -0
  12. data/build/common/copyifgreater.js +290 -0
  13. data/build/common/get_boost_libs.cmake +106 -0
  14. data/build/common/get_ruby_path.cmake +115 -0
  15. data/build/common/options.cmake +127 -0
  16. data/build/common/smart_install.cmake +263 -0
  17. data/build/common/system.cmake +122 -0
  18. data/build/common/transactd.rc.in +52 -0
  19. data/build/common/transactd_cl_common.cmake +101 -0
  20. data/build/common/transactd_cl_output.cmake +93 -0
  21. data/build/common/transactd_common.cmake +237 -0
  22. data/build/common/transactd_required.cmake +28 -0
  23. data/build/swig/ruby/generate.cmake.in +35 -0
  24. data/build/swig/ruby/generate.cmd.in +19 -0
  25. data/build/swig/ruby/ruby.swg +101 -0
  26. data/build/swig/tdcl.i +188 -0
  27. data/build/tdclc/BUILDNUMBER.txt +1 -0
  28. data/build/tdclc/CMakeLists.txt +170 -0
  29. data/build/tdclc/tdclc_32.cbproj +181 -0
  30. data/build/tdclc/tdclc_64.cbproj +205 -0
  31. data/build/tdclcpp/BUILDNUMBER.txt +1 -0
  32. data/build/tdclcpp/CMakeLists.txt +142 -0
  33. data/build/tdclcpp/tdclcpp_bcb_32.cbproj +239 -0
  34. data/build/tdclcpp/tdclcpp_bcb_64.cbproj +304 -0
  35. data/build/tdclrb/BUILDNUMBER.txt +1 -0
  36. data/build/tdclrb/CMakeLists.txt +258 -0
  37. data/build/tdclrb/GEM_VERSION +3 -0
  38. data/build/tdclrb/bldgem/extconf.rb +123 -0
  39. data/build/tdclrb/gem/INSTALLLOG.win32 +9 -0
  40. data/build/tdclrb/gem/Makefile.win32-VS +65 -0
  41. data/build/tdclrb/gem/Makefile.win32-prebuilt +48 -0
  42. data/build/tdclrb/gem/detect.rb +31 -0
  43. data/build/tdclrb/gem/helper.rb +113 -0
  44. data/build/tdclrb/gem/transactd.rb +22 -0
  45. data/build/tdclrb/gem_output.cmake +44 -0
  46. data/source/bzs/db/IBlobBuffer.h +51 -0
  47. data/source/bzs/db/blobBuffer.h +177 -0
  48. data/source/bzs/db/blobStructs.h +85 -0
  49. data/source/bzs/db/engine/mysql/IReadRecords.h +52 -0
  50. data/source/bzs/db/engine/mysql/bookmark.h +195 -0
  51. data/source/bzs/db/engine/mysql/database.cpp +1882 -0
  52. data/source/bzs/db/engine/mysql/database.h +465 -0
  53. data/source/bzs/db/engine/mysql/dbManager.cpp +303 -0
  54. data/source/bzs/db/engine/mysql/dbManager.h +143 -0
  55. data/source/bzs/db/engine/mysql/errorMessage.cpp +75 -0
  56. data/source/bzs/db/engine/mysql/errorMessage.h +43 -0
  57. data/source/bzs/db/engine/mysql/fieldAccess.h +158 -0
  58. data/source/bzs/db/engine/mysql/mydebuglog.cpp +349 -0
  59. data/source/bzs/db/engine/mysql/mydebuglog.h +89 -0
  60. data/source/bzs/db/engine/mysql/mysqlInternal.h +171 -0
  61. data/source/bzs/db/engine/mysql/mysqlThd.cpp +169 -0
  62. data/source/bzs/db/engine/mysql/mysqlThd.h +35 -0
  63. data/source/bzs/db/engine/mysql/percentageKey.h +260 -0
  64. data/source/bzs/db/protocol/ICommandExecuter.h +49 -0
  65. data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +689 -0
  66. data/source/bzs/db/protocol/hs/hsCommandExecuter.h +228 -0
  67. data/source/bzs/db/protocol/tdap/btrDate.cpp +437 -0
  68. data/source/bzs/db/protocol/tdap/btrDate.h +227 -0
  69. data/source/bzs/db/protocol/tdap/client/bulkInsert.h +127 -0
  70. data/source/bzs/db/protocol/tdap/client/client.cpp +106 -0
  71. data/source/bzs/db/protocol/tdap/client/client.h +292 -0
  72. data/source/bzs/db/protocol/tdap/client/connMgr.cpp +144 -0
  73. data/source/bzs/db/protocol/tdap/client/connMgr.h +82 -0
  74. data/source/bzs/db/protocol/tdap/client/database.cpp +863 -0
  75. data/source/bzs/db/protocol/tdap/client/database.h +118 -0
  76. data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +100 -0
  77. data/source/bzs/db/protocol/tdap/client/dbDef.cpp +1640 -0
  78. data/source/bzs/db/protocol/tdap/client/dbDef.h +135 -0
  79. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +434 -0
  80. data/source/bzs/db/protocol/tdap/client/errorMessage.cpp +92 -0
  81. data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +98 -0
  82. data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +174 -0
  83. data/source/bzs/db/protocol/tdap/client/fieldDDF.h +91 -0
  84. data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +140 -0
  85. data/source/bzs/db/protocol/tdap/client/fileDDF.h +86 -0
  86. data/source/bzs/db/protocol/tdap/client/filter.cpp +527 -0
  87. data/source/bzs/db/protocol/tdap/client/filter.h +154 -0
  88. data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +137 -0
  89. data/source/bzs/db/protocol/tdap/client/indexDDF.h +84 -0
  90. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +724 -0
  91. data/source/bzs/db/protocol/tdap/client/nsDatabase.h +123 -0
  92. data/source/bzs/db/protocol/tdap/client/nsTable.cpp +899 -0
  93. data/source/bzs/db/protocol/tdap/client/nsTable.h +199 -0
  94. data/source/bzs/db/protocol/tdap/client/request.h +198 -0
  95. data/source/bzs/db/protocol/tdap/client/sharedData.cpp +58 -0
  96. data/source/bzs/db/protocol/tdap/client/sharedData.h +56 -0
  97. data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +574 -0
  98. data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +53 -0
  99. data/source/bzs/db/protocol/tdap/client/stringConverter.h +627 -0
  100. data/source/bzs/db/protocol/tdap/client/table.cpp +2613 -0
  101. data/source/bzs/db/protocol/tdap/client/table.h +221 -0
  102. data/source/bzs/db/protocol/tdap/client/trdboostapi.h +1096 -0
  103. data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +179 -0
  104. data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +40 -0
  105. data/source/bzs/db/protocol/tdap/client/trnsctcl.def +11 -0
  106. data/source/bzs/db/protocol/tdap/myDateTime.cpp +500 -0
  107. data/source/bzs/db/protocol/tdap/mysql/characterset.cpp +184 -0
  108. data/source/bzs/db/protocol/tdap/mysql/characterset.h +60 -0
  109. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +284 -0
  110. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +53 -0
  111. data/source/bzs/db/protocol/tdap/mysql/debuglog.cpp +383 -0
  112. data/source/bzs/db/protocol/tdap/mysql/debuglog.h +106 -0
  113. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +680 -0
  114. data/source/bzs/db/protocol/tdap/mysql/request.h +202 -0
  115. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +1020 -0
  116. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +141 -0
  117. data/source/bzs/db/protocol/tdap/tdapRequest.h +190 -0
  118. data/source/bzs/db/protocol/tdap/tdapSchema.cpp +295 -0
  119. data/source/bzs/db/protocol/tdap/tdapSchema.h +558 -0
  120. data/source/bzs/db/protocol/tdap/tdapcapi.h +423 -0
  121. data/source/bzs/db/transactd/appBuilderImple.h +55 -0
  122. data/source/bzs/db/transactd/appModule.cpp +183 -0
  123. data/source/bzs/db/transactd/appModule.h +80 -0
  124. data/source/bzs/db/transactd/connManager.cpp +201 -0
  125. data/source/bzs/db/transactd/connManager.h +60 -0
  126. data/source/bzs/db/transactd/connectionRecord.h +69 -0
  127. data/source/bzs/db/transactd/transactd.cpp +325 -0
  128. data/source/bzs/env/compiler.h +135 -0
  129. data/source/bzs/env/crosscompile.cpp +130 -0
  130. data/source/bzs/env/crosscompile.h +150 -0
  131. data/source/bzs/env/fileopen.h +36 -0
  132. data/source/bzs/env/mbcswchrLinux.cpp +40 -0
  133. data/source/bzs/env/mbcswchrLinux.h +88 -0
  134. data/source/bzs/env/tstring.h +183 -0
  135. data/source/bzs/example/changeSchema.cpp +117 -0
  136. data/source/bzs/example/changeSchema_c.cpp +78 -0
  137. data/source/bzs/example/connection_pool_c.cpp +171 -0
  138. data/source/bzs/example/createDatabase.cpp +305 -0
  139. data/source/bzs/example/createDatabase_c.cpp +202 -0
  140. data/source/bzs/example/deleteRecords.cpp +87 -0
  141. data/source/bzs/example/deleteRecords_c.cpp +57 -0
  142. data/source/bzs/example/dropDatabase.cpp +59 -0
  143. data/source/bzs/example/dropDatabase_c.cpp +34 -0
  144. data/source/bzs/example/insertRecords.cpp +212 -0
  145. data/source/bzs/example/insertRecords_c.cpp +153 -0
  146. data/source/bzs/example/readRecords.cpp +141 -0
  147. data/source/bzs/example/readRecords_c.cpp +107 -0
  148. data/source/bzs/example/updateRecords.cpp +99 -0
  149. data/source/bzs/example/updateRecords_c.cpp +71 -0
  150. data/source/bzs/example/update_with_transaction.cpp +104 -0
  151. data/source/bzs/example/update_with_transaction_c.cpp +80 -0
  152. data/source/bzs/netsvc/client/tcpClient.cpp +226 -0
  153. data/source/bzs/netsvc/client/tcpClient.h +489 -0
  154. data/source/bzs/netsvc/server/IAppModule.h +94 -0
  155. data/source/bzs/netsvc/server/iserver.h +65 -0
  156. data/source/bzs/netsvc/server/serverCpt.cpp +522 -0
  157. data/source/bzs/netsvc/server/serverCpt.h +88 -0
  158. data/source/bzs/netsvc/server/serverPipe.cpp +705 -0
  159. data/source/bzs/netsvc/server/serverPipe.h +96 -0
  160. data/source/bzs/netsvc/server/serverTpool.cpp +416 -0
  161. data/source/bzs/netsvc/server/serverTpool.h +84 -0
  162. data/source/bzs/rtl/benchmark.cpp +96 -0
  163. data/source/bzs/rtl/benchmark.h +65 -0
  164. data/source/bzs/rtl/datetime.cpp +375 -0
  165. data/source/bzs/rtl/datetime.h +53 -0
  166. data/source/bzs/rtl/debuglog.cpp +106 -0
  167. data/source/bzs/rtl/debuglog.h +97 -0
  168. data/source/bzs/rtl/exception.h +116 -0
  169. data/source/bzs/rtl/stl_uty.cpp +35 -0
  170. data/source/bzs/rtl/stl_uty.h +29 -0
  171. data/source/bzs/rtl/stringBuffers.cpp +101 -0
  172. data/source/bzs/rtl/stringBuffers.h +58 -0
  173. data/source/bzs/rtl/strtrim.cpp +135 -0
  174. data/source/bzs/rtl/strtrim.h +46 -0
  175. data/source/bzs/test/tdclatl/bench_tdclatl.js +445 -0
  176. data/source/bzs/test/tdclrb/bench_tdclcpp.rb +375 -0
  177. data/source/bzs/test/tdclrb/prepare.rb +226 -0
  178. data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +172 -0
  179. data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +208 -0
  180. data/source/bzs/test/tdclrb/transactd_spec.rb +1536 -0
  181. data/source/bzs/test/transactdBench/transactdBench.cpp +430 -0
  182. data/source/bzs/test/transactdBench/transactdBench2.cpp +342 -0
  183. data/source/bzs/test/trdclengn/test_trdclengn.cpp +2030 -0
  184. data/source/global/tdclatl/Database.cpp +503 -0
  185. data/source/global/tdclatl/Database.h +139 -0
  186. data/source/global/tdclatl/DbDef.cpp +242 -0
  187. data/source/global/tdclatl/DbDef.h +79 -0
  188. data/source/global/tdclatl/Field.cpp +92 -0
  189. data/source/global/tdclatl/Field.h +59 -0
  190. data/source/global/tdclatl/FieldDef.cpp +238 -0
  191. data/source/global/tdclatl/FieldDef.h +87 -0
  192. data/source/global/tdclatl/Flags.cpp +111 -0
  193. data/source/global/tdclatl/Flags.h +55 -0
  194. data/source/global/tdclatl/KeyDef.cpp +51 -0
  195. data/source/global/tdclatl/KeyDef.h +55 -0
  196. data/source/global/tdclatl/KeySegment.cpp +55 -0
  197. data/source/global/tdclatl/Table.cpp +600 -0
  198. data/source/global/tdclatl/Table.h +144 -0
  199. data/source/global/tdclatl/TableDef.cpp +291 -0
  200. data/source/global/tdclatl/TableDef.h +86 -0
  201. data/source/global/tdclatl/TdVersion.cpp +74 -0
  202. data/source/global/tdclatl/TdVersion.h +54 -0
  203. data/source/global/tdclatl/_IDatabaseEvents_CP.h +113 -0
  204. data/source/global/tdclatl/dllmain.cpp +30 -0
  205. data/source/global/tdclatl/dllmain.h +27 -0
  206. data/source/global/tdclatl/keySegment.h +57 -0
  207. data/source/global/tdclatl/resource.h +0 -0
  208. data/source/global/tdclatl/stdafx.cpp +2 -0
  209. data/source/global/tdclatl/stdafx.h +25 -0
  210. data/source/global/tdclatl/targetver.h +4 -0
  211. data/source/global/tdclatl/tdclatl.cpp +68 -0
  212. data/source/global/tdclatl/tdclatl.def +10 -0
  213. data/source/global/tdclatl/tdclatl.idl +1035 -0
  214. data/source/linux/charsetConvert.h +112 -0
  215. data/source/linux/linuxTypes.h +33 -0
  216. data/source/linux/tchar.h +428 -0
  217. data/transactd.gemspec +97 -0
  218. metadata +267 -0
@@ -0,0 +1,85 @@
1
+ #ifndef BZS_DB_BLOBSTRUCTS_H
2
+ #define BZS_DB_BLOBSTRUCTS_H
3
+ /*=================================================================
4
+ Copyright (C) 2013 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 <bzs/env/compiler.h>
22
+
23
+ namespace bzs
24
+ {
25
+ namespace db
26
+ {
27
+
28
+ #pragma option -a-
29
+ pragma_pack1
30
+
31
+ /** bolob buffer field
32
+ * size byte is allways 4byte.
33
+ * 2byte null
34
+ */
35
+ struct blobField
36
+ {
37
+ unsigned int size;
38
+ unsigned short fieldNum;
39
+ inline const char* data()const{return (const char*)(this+1);}
40
+ inline const blobField* next()const{return (const blobField*)(data()+size+2);};
41
+ };
42
+
43
+ struct blob
44
+ {
45
+ inline blob(unsigned int size, unsigned short fnum, const unsigned char* dataptr)
46
+ :ptr(dataptr)
47
+ {
48
+ bf.fieldNum = fnum;
49
+ bf.size = size;
50
+ };
51
+ blobField bf;
52
+ const unsigned char* ptr;
53
+ };
54
+
55
+ /** blob buffer header
56
+ *
57
+ */
58
+ struct blobHeader
59
+ {
60
+ unsigned short rows;
61
+ unsigned short fieldCount;
62
+ mutable unsigned short curRow;
63
+ mutable blobField* nextField;
64
+ #ifndef __x86_64__
65
+ blobField* dymmySpace32; //8byte size space for 32bit
66
+ #endif
67
+
68
+ inline void resetCur() const
69
+ {
70
+ curRow = 0;
71
+ nextField = (blobField*)(this+1);
72
+ }
73
+ };
74
+
75
+ #pragma option -a
76
+ pragma_pop
77
+
78
+ }//namespace db
79
+ }//namespace bzs
80
+
81
+ #endif //BZS_DB_BLOBSTRUCTS_H
82
+
83
+
84
+
85
+
@@ -0,0 +1,52 @@
1
+ #ifndef IREADRECORDS_H
2
+ #define IREADRECORDS_H
3
+ /*=================================================================
4
+ Copyright (C) 2012 2013 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
+
22
+
23
+ namespace bzs
24
+ {
25
+ namespace db
26
+ {
27
+ namespace engine
28
+ {
29
+ namespace mysql
30
+ {
31
+
32
+ #define REC_MACTH 0
33
+ #define REC_NOMACTH 1
34
+ #define REC_NOMACTH_NOMORE 2
35
+
36
+ class IReadRecordsHandler
37
+ {
38
+
39
+ public:
40
+ virtual ~IReadRecordsHandler(){};
41
+ virtual int match(bool typeNext) const=0;
42
+ virtual short write(const unsigned char* bookmark, unsigned int bmlen)=0;
43
+ virtual unsigned short rejectCount() = 0;
44
+ virtual unsigned short maxRows() = 0;
45
+ };
46
+
47
+ }//namespace mysql
48
+ }//namespace engine
49
+ }//namespace db
50
+ }//namespace bzs
51
+
52
+ #endif //IREADRECORDS_H
@@ -0,0 +1,195 @@
1
+ #ifndef BOOKMARK_H
2
+ #define BOOKMARK_H
3
+ /*=================================================================
4
+ Copyright (C) 2012 2013 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
+
22
+ #include <vector>
23
+ #include <bzs/rtl/exception.h>
24
+ #include "mysqlInternal.h"
25
+
26
+ #ifdef BOOKMARK_USE_MULTIMAP
27
+ #include <boost/multi_index_container.hpp>
28
+ #include <boost/multi_index/member.hpp>
29
+ #include <boost/multi_index/ordered_index.hpp>
30
+ using namespace boost::multi_index;
31
+
32
+ #endif
33
+
34
+ namespace bzs
35
+ {
36
+ namespace db
37
+ {
38
+ namespace engine
39
+ {
40
+ namespace mysql
41
+ {
42
+
43
+ #ifdef BOOKMARK_USE_MULTIMAP
44
+ /** The version which can reverse-refer to bookmark from raw ref using multi map
45
+ * In order that this system may use a lot of memories
46
+ , there is a problem in which the fall of performance occurs.
47
+ */
48
+
49
+ typedef std::vector<unsigned char> charArray;
50
+ struct bookmark
51
+ {
52
+ unsigned int id;
53
+ charArray ref;
54
+ bookmark(unsigned int id, const charArray& ref):id(id), ref(ref){}
55
+
56
+ };
57
+
58
+ struct id {};
59
+ struct ref {};
60
+
61
+ typedef multi_index_container< bookmark,
62
+ indexed_by<ordered_unique<tag<id>, member<bookmark, unsigned int, &bookmark::id> >
63
+ ,ordered_unique<tag<ref>, member<bookmark, charArray, &bookmark::ref> > > > bookmarkContainer;
64
+
65
+ typedef bookmarkContainer::index<id>::type id_map;
66
+ typedef bookmarkContainer::index<ref>::type ref_map;
67
+
68
+ class bookmarks
69
+ {
70
+ int m_refLen;
71
+ int m_lastbm;
72
+ bookmarkContainer m_bms;
73
+ charArray m_tmpRef;
74
+
75
+ public:
76
+ bookmarks(int refLen):m_refLen(refLen),m_tmpRef(refLen),m_lastbm(0)
77
+ {
78
+ }
79
+
80
+ /** get integer bookmark pointer by raw ref pointer
81
+ */
82
+ const unsigned char* getBookmarkPtr(unsigned char* rawRefPtr)
83
+ {
84
+ m_tmpRef.clear();
85
+ m_tmpRef.insert(m_tmpRef.end(), rawRefPtr, rawRefPtr+m_refLen);
86
+ ref_map& m = m_bms.get<ref>();
87
+ ref_map::iterator it = m.find(m_tmpRef);
88
+ if (it == m.end())
89
+ {
90
+ m_bms.insert(m_bms.end(), bookmark(++m_lastbm, m_tmpRef));
91
+ it = m.find(m_tmpRef);
92
+ }
93
+ return (const unsigned char*)&it->id;
94
+ }
95
+
96
+ unsigned int getBookmark(unsigned char* rawRefPtr)
97
+ {
98
+ return *((unsigned int*)getBookmarkPtr(rawRefPtr));
99
+ }
100
+ /** get raw ref pointer by integer bookmark
101
+ */
102
+ const unsigned char* getRefByBm(unsigned int bm)
103
+ {
104
+ id_map& m = m_bms.get<id>();
105
+ id_map::iterator it = m.find(bm);
106
+ if (it != m.end())
107
+ return &(it->ref[0]);
108
+ THROW_BZS_ERROR_WITH_CODEMSG(STATUS_INVALID_BOOKMARK ,"invalid bookmark.");
109
+ }
110
+
111
+ };
112
+ #else //BOOKMARK_USE_MULTIMAP
113
+
114
+ /** The version which returns raw ref to bookmark in simple arrangement
115
+ * The maximum memory size is specified in MAX_BOOKMARK_MEM_SIZE.
116
+ * When the memory exceeding it is required, it is considered as an error.
117
+ */
118
+
119
+
120
+
121
+ #define MAX_BOOKMARK_MEM_SIZE 500*1024*1024 //500MB
122
+ #define UNIT_OF_ALLOCCOUNT 10000
123
+
124
+ class bookmarks
125
+ {
126
+ size_t m_refLen;
127
+ size_t m_allocatedCount;
128
+ size_t m_usedCount;
129
+ unsigned char* m_ptr;
130
+ unsigned int m_bookmark;
131
+
132
+ void allocBuffer(size_t count)
133
+ {
134
+ if (MAX_BOOKMARK_MEM_SIZE < count*m_refLen)
135
+ THROW_BZS_ERROR_WITH_CODEMSG(STATUS_INVALID_BOOKMARK ,"invalid bookmark.");
136
+ void* tmp;
137
+ if (m_ptr == NULL)
138
+ tmp = (unsigned char*)my_malloc(count*m_refLen, 0);
139
+ else
140
+ tmp = my_realloc(m_ptr, count*m_refLen, 0);
141
+ if (tmp)
142
+ m_ptr = (unsigned char*)tmp;
143
+ else
144
+ THROW_BZS_ERROR_WITH_CODEMSG(STATUS_INVALID_BOOKMARK ,"invalid bookmark.");
145
+ m_allocatedCount = count;
146
+ }
147
+
148
+ public:
149
+ bookmarks(size_t refLen):m_refLen(refLen),m_usedCount(0),m_ptr(NULL)
150
+ {
151
+ allocBuffer(UNIT_OF_ALLOCCOUNT);
152
+ }
153
+
154
+ ~bookmarks()
155
+ {
156
+ my_free(m_ptr);
157
+ }
158
+
159
+ /** get integer bookmark pointer by raw ref pointer
160
+ */
161
+ const unsigned char* getBookmarkPtr(unsigned char* rawRefPtr)
162
+ {
163
+ if (m_usedCount == m_allocatedCount)
164
+ allocBuffer(m_usedCount+UNIT_OF_ALLOCCOUNT);
165
+
166
+ memcpy(m_ptr+m_usedCount*m_refLen, rawRefPtr, m_refLen);
167
+ m_bookmark = (unsigned int)(++m_usedCount);
168
+ return (const unsigned char*)&m_bookmark;
169
+ }
170
+
171
+ unsigned int getBookmark(unsigned char* rawRefPtr)
172
+ {
173
+ return *((unsigned int*)getBookmarkPtr(rawRefPtr));
174
+ }
175
+
176
+ /** get raw ref pointer by integer bookmark
177
+ */
178
+ const unsigned char* getRefByBm(unsigned int bm)
179
+ {
180
+ if ((0==bm) || bm > m_usedCount)
181
+ THROW_BZS_ERROR_WITH_CODEMSG(STATUS_INVALID_BOOKMARK ,"invalid bookmark.");
182
+ return m_ptr+(bm-1)*m_refLen;
183
+ }
184
+
185
+ };
186
+
187
+ #endif
188
+
189
+ }//namespace mysql
190
+ }//namespace engine
191
+ }//namespace db
192
+ }//namespace bzs
193
+
194
+ #endif //BOOKMARK_H
195
+