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,292 @@
1
+ #ifndef BZS_DB_PROTOCOL_TDAP_CLIENT_CLIENT_H
2
+ #define BZS_DB_PROTOCOL_TDAP_CLIENT_CLIENT_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
+ #include "sqlBuilder.h"
22
+ #include "request.h"
23
+ #include <bzs/db/blobBuffer.h>
24
+ #include <boost/thread/mutex.hpp>
25
+ #include <bzs/db/protocol/tdap/tdapSchema.h>
26
+ #include <bzs/netsvc/client/tcpClient.h>
27
+ #include <bzs/db/protocol/tdap/tdapcapi.h>
28
+ #include <bzs/db/protocol/tdap/mysql/characterset.h>
29
+ #include <bzs/env/compiler.h>
30
+ #include <bzs/rtl/stl_uty.h>
31
+ #include <vector>
32
+ #ifdef _WIN32
33
+ #include <mbstring.h>
34
+ #endif
35
+ extern bzs::netsvc::client::connections* m_cons;
36
+
37
+ namespace bzs
38
+ {
39
+ namespace db
40
+ {
41
+ namespace protocol
42
+ {
43
+ namespace tdap
44
+ {
45
+ namespace client
46
+ {
47
+ #define TABELNAME_PREFIX "dbfile="
48
+
49
+
50
+
51
+ class client
52
+ {
53
+
54
+ mutex m_mutex;
55
+ request m_req;
56
+ posblk m_tmpPbk;
57
+ ushort_td m_op;
58
+ ushort_td m_preResult;
59
+ int m_charsetIndexServer;
60
+ std::string m_sql;
61
+ std::string m_serverCharData;
62
+ std::string m_serverCharData2;
63
+
64
+ uint_td m_tmplen;
65
+ bool m_logout;
66
+ blobBuffer m_blobBuffer;
67
+
68
+
69
+ std::vector<char> m_sendbuf;
70
+ inline bzs::netsvc::client::connection* con(){return m_req.cid->con;};
71
+ inline void setCon(bzs::netsvc::client::connection* con){m_req.cid->con=con;};
72
+
73
+ inline void disconnect()
74
+ {
75
+ m_req.result = !m_cons->disconnect(con());
76
+ if (m_req.result==0)
77
+ setCon(NULL);
78
+ }
79
+ std::string getHostName(const char* uri)
80
+ {
81
+ std::vector<std::string> ss ;
82
+ split(ss, uri, "/"); /* btrv://serverName/dbName?dbfile=xxx */
83
+ if (ss.size()<3)
84
+ return "";
85
+ return ss[2];
86
+ }
87
+ std::string getTableName(const char* uri)
88
+ {
89
+ if (uri)
90
+ {
91
+ mbchar* en = (mbchar*)uri;
92
+ mbchar* st = _mbsstr(en, (mbchar*)TABELNAME_PREFIX);
93
+ if (st)
94
+ {
95
+ st +=strlen(TABELNAME_PREFIX);
96
+ mbchar* tmp = _mbsstr(st, (mbchar*)PSEPARATOR_A);
97
+ if (tmp)
98
+ st = tmp+1;
99
+ en = _mbsstr(st, (mbchar*)".");
100
+ if (en==NULL)
101
+ en = st + strlen((char*)st);
102
+ return std::string((const char*)st, en-st);
103
+ }
104
+ }
105
+ return "";
106
+ }
107
+ static void addSecondCharsetData(unsigned int destCodePage, std::string& src);
108
+ public:
109
+ client():m_charsetIndexServer(-1)
110
+ {
111
+ }
112
+ request& req(){return m_req;}
113
+ inline void setParam(ushort_td op, posblk* pbk,
114
+ void_td* data, uint_td* datalen,
115
+ void_td* keybuf, keylen_td keylen,
116
+ char_td keyNum, clientID* cid)
117
+ {
118
+ m_op = op;
119
+ m_req.op = op;
120
+ m_req.pbk = pbk;
121
+ m_req.data = data;
122
+ m_req.datalen = datalen;
123
+ m_req.keybuf = keybuf;
124
+ m_req.keylen = keylen;
125
+ m_req.keyNum = keyNum;
126
+ m_req.cid = cid;
127
+ m_req.paramMask = 0;
128
+ m_preResult = 0;
129
+ m_logout = false;
130
+ if (m_req.pbk==NULL) m_req.pbk = &m_tmpPbk;
131
+
132
+ }
133
+ inline short_td result(){return m_preResult;}
134
+
135
+ inline bool stop_if()
136
+ {
137
+ if (m_op==TD_STOP_ENGINE)
138
+ {
139
+ m_req.result = !m_cons->disconnect(con());
140
+ if (m_req.result==0)
141
+ setCon(NULL);
142
+ return !m_req.result;
143
+ }
144
+ return false;
145
+ }
146
+ inline void connect()
147
+ {
148
+ if (!m_req.cid->con)
149
+ {
150
+ std::string host = getHostName((const char*)m_req.keybuf);
151
+ if (host=="")
152
+ m_req.result = ERROR_TD_HOSTNAME_NOT_FOUND;
153
+ setCon(m_cons->connect(host)); //if error throw exception
154
+
155
+ }
156
+
157
+ }
158
+ inline void create()
159
+ {
160
+ m_req.paramMask = P_MASK_ALL;
161
+ if ((m_req.datalen==NULL) || *m_req.datalen == 0)
162
+ m_req.paramMask = P_MASK_KEYONLY;
163
+ else if (m_req.keyNum > CR_SUBOP_SWAPNAME) //-126 swap -127 is rename. -128 is drop.
164
+ {
165
+ m_req.paramMask &= ~P_MASK_POSBLK;
166
+ std::string name = getTableName((const char*)m_req.keybuf);
167
+ if ((m_req.keyNum==1)|| (m_req.keyNum==2)) //make by tabledef
168
+ {
169
+ m_sql = sqlCreateTable(name.c_str(), (tabledef*)m_req.data, m_charsetIndexServer);
170
+ m_req.keyNum -= 2; // 1= exists check 2 = no exists check
171
+ }else
172
+ m_sql = sqlCreateTable(name.c_str(), (fileSpec*)m_req.data, m_charsetIndexServer);
173
+ m_req.data =(ushort_td*) m_sql.c_str();
174
+ m_tmplen = (uint_td)(m_sql.size()+1);
175
+ m_req.datalen = &m_tmplen;
176
+ }else if ((m_req.keyNum == CR_SUBOP_SWAPNAME)||(m_req.keyNum == CR_SUBOP_RENAME))
177
+ {
178
+ readServerCharsetIndex();
179
+ //m_sql = std::string((char*)m_req.data, *m_req.datalen);
180
+ m_sql = (char*)m_req.data;
181
+ addSecondCharsetData(mysql::codePage(m_charsetIndexServer), m_sql);
182
+ m_req.data =(ushort_td*) m_sql.c_str();
183
+ m_tmplen = (uint_td)(m_sql.size()+1);
184
+ m_req.datalen = &m_tmplen;
185
+ }
186
+ }
187
+ inline void cmdConnect()
188
+ {
189
+ if ((m_req.keyNum == LG_SUBOP_CONNECT)|| (m_req.keyNum == LG_SUBOP_NEWCONNECT))
190
+ {
191
+ if (con() && con()->isConnected())
192
+ m_preResult = 1;
193
+ else
194
+ {
195
+ std::string host = getHostName((const char*)m_req.keybuf);
196
+ if (host=="")
197
+ m_preResult = ERROR_TD_HOSTNAME_NOT_FOUND;
198
+ setCon(m_cons->connect(host, (m_req.keyNum == LG_SUBOP_NEWCONNECT))); //if error throw exception
199
+ buildDualChasetKeybuf();
200
+ }
201
+ }else if (m_req.keyNum == LG_SUBOP_DISCONNECT)
202
+ {
203
+ if (con())
204
+ m_logout = true;
205
+ else if (m_op==TD_CONNECT)
206
+ m_preResult = 1;
207
+ }
208
+ m_req.paramMask = P_MASK_KEYONLY;
209
+ }
210
+ inline ushort_td execute()
211
+ {
212
+ if (result()==0)
213
+ {
214
+ //mutex::scoped_lock lck(m_mutex);
215
+ if (!con())
216
+ m_preResult = ERROR_TD_NOT_CONNECTED;
217
+ else
218
+ {
219
+ char* p = con()->sendBuffer();
220
+ unsigned int size = m_req.serialize(p);
221
+ if ((m_req.paramMask & P_MASK_BLOBBODY) && m_blobBuffer.blobs())
222
+ size = m_req.serializeBlobBody(&m_blobBuffer
223
+ , p, con()->sendBufferSize(), con()->optionalBuffers());
224
+ p = con()->asyncWriteRead(size);
225
+ m_req.parse(p);
226
+ if (m_logout)
227
+ disconnect();
228
+ m_preResult = m_req.result;
229
+ }
230
+
231
+ }
232
+ return result();
233
+ }
234
+ inline ushort_td getBlobBuffer(const blobHeader** data)
235
+ {
236
+ *data = m_req.blobHeader;
237
+ return *data ? 0:1;;
238
+ }
239
+
240
+ inline ushort_td addBlob(const blob* data, bool endRow)
241
+ {
242
+ if (endRow)
243
+ {
244
+ if (m_blobBuffer.fieldCount()==0)
245
+ m_blobBuffer.setFieldCount((unsigned int)m_blobBuffer.blobs());
246
+ return 0;
247
+ }
248
+ if (data==NULL)
249
+ m_blobBuffer.clear();
250
+ else
251
+ m_blobBuffer.addBlob(*data);
252
+ return 0;
253
+ }
254
+ bool readServerCharsetIndex();
255
+
256
+ bool buildDualChasetKeybuf();
257
+
258
+ };
259
+
260
+ #ifndef _MSC_VER
261
+ extern __THREAD client* __THREAD_BCB g_client;
262
+ #else
263
+ extern DWORD g_tlsiID;
264
+ #endif
265
+
266
+
267
+ inline client* getClientThread()
268
+ {
269
+ #ifdef _MSC_VER
270
+ return (client*)TlsGetValue(g_tlsiID);
271
+ #else
272
+ return g_client;
273
+ #endif
274
+ }
275
+
276
+ inline void setClientThread(client* v)
277
+ {
278
+ #ifdef _MSC_VER
279
+ TlsSetValue(g_tlsiID, v);
280
+ #else
281
+ g_client = v;
282
+ #endif
283
+ }
284
+
285
+
286
+ }//namespace client
287
+ }//namespace tdap
288
+ }//namespace protocol
289
+ }//namespace db
290
+ }//namespace bzs
291
+
292
+ #endif//BZS_DB_PROTOCOL_TDAP_CLIENT_CLIENT_H
@@ -0,0 +1,144 @@
1
+ /*=================================================================
2
+ Copyright (C) 2013 BizStation Corp All rights reserved.
3
+
4
+ This program is free software; you can redistribute it and/or
5
+ modify it under the terms of the GNU General Public License
6
+ as published by the Free Software Foundation; either version 2
7
+ of the License, or (at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License
15
+ along with this program; if not, write to the Free Software
16
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
+ 02111-1307, USA.
18
+ =================================================================*/
19
+ #include <bzs/env/tstring.h>
20
+ #pragma hdrstop
21
+
22
+ #include "connMgr.h"
23
+ #include "database.h"
24
+
25
+
26
+ #pragma package(smart_init)
27
+
28
+ namespace bzs
29
+ {
30
+ namespace db
31
+ {
32
+ namespace protocol
33
+ {
34
+ namespace tdap
35
+ {
36
+ namespace client
37
+ {
38
+
39
+
40
+ connMgr::connMgr(database* db):nstable(db)
41
+ {
42
+ m_db = db;
43
+ }
44
+
45
+ connMgr::~connMgr()
46
+ {
47
+
48
+ }
49
+ database* connMgr::db()const{return m_db;}
50
+
51
+ void connMgr::connect(const _TCHAR* uri)
52
+ {
53
+ m_db->connect(uri, true);
54
+ m_stat = m_db->stat();
55
+ if (m_stat == 0)
56
+ m_uri = uri;
57
+ }
58
+
59
+ void connMgr::disconnect()
60
+ {
61
+ if (m_uri != _T(""))
62
+ {
63
+ m_db->disconnect(m_uri.c_str());
64
+ m_stat = m_db->stat();
65
+ if (m_stat == 0)
66
+ m_uri = _T("");
67
+ }
68
+ }
69
+
70
+ void connMgr::allocBuffer()
71
+ {
72
+ m_records.resize(64000/sizeof(connMgr::record));
73
+
74
+ m_datalen = m_buflen = (uint_td)(m_records.size()*sizeof(connMgr::record));
75
+ m_pdata = (void*)&m_records[0];
76
+ memset(m_pdata, 0, m_datalen);
77
+ setIsOpen(true);
78
+ m_keybuf = &m_params[0];
79
+ m_params[0] = 0;
80
+ m_params[1] = 0;
81
+ m_keylen = sizeof(m_params);
82
+ }
83
+
84
+ const connMgr::records& connMgr::connections()
85
+ {
86
+ allocBuffer();
87
+ m_keynum = TD_STSTCS_READ;
88
+ tdap(TD_STASTISTICS);
89
+ if (m_stat == 0)
90
+ m_records.resize(m_datalen/sizeof(connMgr::record));
91
+ return m_records;
92
+ }
93
+
94
+ const connMgr::records& connMgr::databases(__int64 connid)
95
+ {
96
+ allocBuffer();
97
+ m_keynum = TD_STSTCS_READ;
98
+ m_params[0] = connid;
99
+ m_params[1] = -1;
100
+ tdap(TD_STASTISTICS);
101
+ if (m_stat == 0)
102
+ m_records.resize(m_datalen/sizeof(connMgr::record));
103
+ return m_records;
104
+ }
105
+
106
+ const connMgr::records& connMgr::tables(__int64 connid, int dbid)
107
+ {
108
+ allocBuffer();
109
+ m_keynum = TD_STSTCS_READ;
110
+ m_params[0] = connid;
111
+ m_params[1] = dbid;
112
+ tdap(TD_STASTISTICS);
113
+ if (m_stat == 0)
114
+ m_records.resize(m_datalen/sizeof(connMgr::record));
115
+ return m_records;
116
+ }
117
+
118
+ void connMgr::disconnectOne(__int64 connid)
119
+ {
120
+ m_keynum = TD_STSTCS_DISCONNECT_ONE;
121
+ record& rec = m_records[0];
122
+ rec.conId = connid;
123
+ tdap(TD_STASTISTICS);
124
+ }
125
+
126
+ void connMgr::disconnectAll()
127
+ {
128
+ m_keynum = TD_STSTCS_DISCONNECT_ALL;
129
+ tdap(TD_STASTISTICS);
130
+
131
+ }
132
+
133
+ short_td connMgr::stat()
134
+ {
135
+ return m_stat;
136
+ }
137
+
138
+
139
+
140
+ }//namespace client
141
+ }//namespace tdap
142
+ }//namespace protocol
143
+ }//namespace db
144
+ }//namespace bzs
@@ -0,0 +1,82 @@
1
+ #ifndef BZS_DB_PROTOCOL_TDAP_CLIENT_CTDCONNMGR_H
2
+ #define BZS_DB_PROTOCOL_TDAP_CLIENT_CTDCONNMGR_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 "nsTable.h"
22
+ #include <bzs/db/transactd/connectionRecord.h>
23
+ #include <vector>
24
+
25
+
26
+ namespace bzs
27
+ {
28
+ namespace db
29
+ {
30
+ namespace protocol
31
+ {
32
+ namespace tdap
33
+ {
34
+ namespace client
35
+ {
36
+
37
+ class database;
38
+ #pragma warning(disable:4251)
39
+
40
+ class AGRPACK connMgr : private nstable
41
+ {
42
+ public:
43
+ typedef bzs::db::transactd::connection::record record;
44
+ typedef std::vector<record> records;
45
+ protected:
46
+
47
+
48
+ private:
49
+ std::vector<record> m_records;
50
+ __int64 m_params[2];
51
+ database* m_db;
52
+ std::_tstring m_uri;
53
+ void allocBuffer();
54
+ void writeRecordData(){};
55
+ void onReadAfter(){};
56
+
57
+ ~connMgr();
58
+ public:
59
+ explicit connMgr(database* db);
60
+
61
+ void connect(const _TCHAR* uri);
62
+ void disconnect();
63
+ const records& connections();
64
+ const records& databases(__int64 connid);
65
+ const records& tables(__int64 connid, int dbid);
66
+ void disconnectOne(__int64 connid);
67
+ void disconnectAll();
68
+ short_td stat();
69
+
70
+ database* db()const;
71
+ using nstable::tdapErr;
72
+ };
73
+
74
+ #pragma warning(default:4251)
75
+
76
+
77
+ }//namespace client
78
+ }//namespace tdap
79
+ }//namespace protocol
80
+ }//namespace db
81
+ }//namespace bzs
82
+ #endif //BZS_DB_PROTOCOL_TDAP_CLIENT_CTDCONNMGR_H